使用 heroku-fcgi 处理没有 .php 扩展名的文件 (Apache)

Using heroku-fcgi to handle files without a .php extension (Apache)

概览

我正在尝试使用 Apache 在 Heroku 上托管一些遗留 PHP 应用程序。它们都依赖于以下已弃用的语法来将任何未知文件类型(没有 .php 扩展名)解析为 PHP.

DefaultType application/x-httpd-php

这在 Apache 2.4 中已被 AddType 取代(Heroku 目前使用 v2.4.37)。 Heroku 还使用 mod_proxy_fcgi to process PHP files via fcgi://heroku-fcgi.

问题

我有一个文件 foo.test,我想让 PHP FPM 处理它。从文档和 default Apache config provided by Heroku 中获取线索,这是我尝试过的:

 # .htaccess

<FilesMatch \.test$>
    <If "-f %{REQUEST_FILENAME}">
        SetHandler proxy:fcgi://heroku-fcgi
    </If>
</FilesMatch>

# apache_app.conf (properly loaded via Procfile)

ProxyPassMatch "^/(.*\.test(/.*)?)$" "fcgi://heroku-fcgi/app/"

有了这两个,我从 PHP FPM 得到了纯文本 403 Access denied. 响应。我确定这两个配置都正确加载并指向 FCGI 处理程序,因为更改端点会导致其他错误。

我的 Apache 技能早已生疏,我似乎无法在网上找到任何好的建议。 Apache 错误日志也很干净。任何想法(没有明显的 "change all extensions to PHP, you dumbass")将不胜感激!

相当明显的解决方案。 PHP FPM 有 its own configurationsecurity.limit_extensions 标志。它默认为 .php.

解决方案是取消设置该值:security.limit_extensions =。这自然会带来一些安全威胁,但这些应用程序仅用于静态演示。

我正在使用 heroku/heroku-buildpack-php 但将其分叉以更新 this filehtaccess FilesMatch 现在应该可以工作了,但我只是将它放入 Apache 配置文件中,以避免在我将要服务的站点之间重复。