AddHandler不适用于.php文件 - Apache 2.4

时间:2015-03-30 09:44:34

标签: php apache apache2.4

我正在为名为helloworld的.php和.html文件创建一个虚拟处理程序。处理程序包含:

static int helloworld_handler(request_rec *r){
    ap_rprintf(r, "hello world!");
    return OK;
}

我在apache2.conf中得到了这个:

<Directory /var/www/html>
AddHandler helloworld .php .html
</Directory>

处理程序“helloworld”适用于.html文件,但它不适用于.php文件。我认为这主要是因为默认的PHP处理程序会覆盖.php文件的helloworld处理程序。如何使“helloworld”处理程序适用于.php文件?

如果需要任何额外信息,请询问。

3 个答案:

答案 0 :(得分:4)

您可能想尝试SetHandler而不是

<FilesMatch \.php$>
    SetHandler helloworld
</FilesMatch>

答案 1 :(得分:0)

SetHandler将删除任何先前设置的处理程序。要获得处理程序首先运行的选项,然后在处理程序返回DECLINE时运行默认的PHP处理程序,首先需要设置你的处理程序,然后添加PHP

<FilesMatch \.html$>
    SetHandler helloworld .html
</FilesMatch>
<FilesMatch \.php$>
    SetHandler helloworld .php
    AddHandler php5-script .php
</FilesMatch>

请注意,这样可以清除以前为.html文件设置的任何处理程序

每个请求只能有一个处理程序处理任何文件类型。如果您始终希望首先运行PHP解释器,然后运行第二个处理程序,则可以考虑使用AddOutputFilter指令。

  

大多数阶段由处理它们的第一个模块终止;但是,对于日志记录,`fixups&#39;以及非访问身份验证检查,所有处理程序始终运行(禁止出错)。

Apache API reference

AddOutputFilter docs

答案 2 :(得分:-3)

添加处理程序后需要重新启动Apache服务器。

还检查服务器是否实际按照您希望的方式解释扩展。您可以从托管服务提供商的系统管理员处检查该类信息。许多系统管理员禁用某些功能以提高安全性。