使用 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 configuration 和 security.limit_extensions
标志。它默认为 .php
.
解决方案是取消设置该值:security.limit_extensions =
。这自然会带来一些安全威胁,但这些应用程序仅用于静态演示。
我正在使用 heroku/heroku-buildpack-php
但将其分叉以更新 this file。 htaccess
FilesMatch
现在应该可以工作了,但我只是将它放入 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 configuration 和 security.limit_extensions
标志。它默认为 .php
.
解决方案是取消设置该值:security.limit_extensions =
。这自然会带来一些安全威胁,但这些应用程序仅用于静态演示。
我正在使用 heroku/heroku-buildpack-php
但将其分叉以更新 this file。 htaccess
FilesMatch
现在应该可以工作了,但我只是将它放入 Apache 配置文件中,以避免在我将要服务的站点之间重复。