我正在尝试在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/$1"
使用这两种方法,我都从PHP FPM得到了纯文本403 Access denied.
响应。我确信两个配置都正确加载并指向FCGI处理程序,因为更改端点会导致其他错误。
我的Apache技能早已生锈,所以我似乎无法在网上找到任何好的指针。 Apache错误日志也很干净。任何想法(没有明显的“将所有扩展更改为PHP,您都笨拙”)都将不胜感激!
答案 0 :(得分:0)
明显的解决方案。 PHP FPM具有its own configuration和security.limit_extensions
标志。默认为.php
。
解决方案是取消设置该值:security.limit_extensions =
。这自然会带来一些安全威胁,但是这些应用程序仅用于静态演示。
我当时使用的是heroku/heroku-buildpack-php
,但分叉了它来更新this file。 htaccess
FilesMatch
现在应该可以使用,但是我最终将其放入Apache配置文件中,以避免在我将要服务的站点之间重复。