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

时间:2018-12-23 00:11:10

标签: php apache heroku fpm

概述

我正在尝试在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,您都笨拙”)都将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

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

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