AddHandler 不适用于 .php 文件 - Apache 2.4
Posted
技术标签:
【中文标题】AddHandler 不适用于 .php 文件 - Apache 2.4【英文标题】:AddHandler not working for .php files - Apache 2.4 【发布时间】:2015-06-03 06:38:44 【问题描述】:我正在为 .php 和 .html 文件创建一个名为 helloworld
的虚拟处理程序。处理程序包含以下内容:
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 文件?
如果需要任何额外信息,请询问。
【问题讨论】:
这个类似吗:serverfault.com/questions/593064/… 是的,它是相似的。但是那里没有正确的答案。 【参考方案1】:您可能想改用SetHandler
<FilesMatch \.php$>
SetHandler helloworld
</FilesMatch>
【讨论】:
这会覆盖默认的 php 处理程序。如果我在 helloworld_handler 中执行“return DECLINED”而不是“return OK”,则默认 php 处理程序不会评估 php 文件。你能告诉我如何不覆盖默认的 php 处理程序吗? 我从未尝试过,但我不明白为什么您不能同时添加第二个处理程序来将 PHP 文件发送到默认 PHP 处理程序application/x-httpd-php5
我在问题中添加了编辑部分。你能帮忙吗?
是的,我尝试使用 SetHandler,但是文件的 php 内容没有得到评估。
我不确定这是否仍然在原始问题的范围内。我可以建议的最好的事情是查看this thread,它讨论了加载多个版本的 PHP【参考方案2】:
SetHandler 将删除任何以前设置的处理程序。要获得让您的处理程序先运行的选项,然后在您的处理程序返回 DECLINE 时运行默认的 PHP 处理程序,您需要先设置您的处理程序,然后添加 PHP
<FilesMatch \.html$>
SetHandler helloworld .html
</FilesMatch>
<FilesMatch \.php$>
SetHandler helloworld .php
AddHandler php5-script .php
</FilesMatch>
请注意,这会清除之前为 .html 文件设置的所有处理程序
您只能让一个处理程序处理每个请求的任何文件类型。如果你总是希望 PHP 解释器先运行,然后你的处理程序再运行,你可以考虑 AddOutputFilter 指令。
大多数阶段由处理它们的第一个模块终止;但是,对于日志记录、“修复”和非访问身份验证检查,所有处理程序始终运行(除非出现错误)。
Apache API reference
AddOutputFilter docs
【讨论】:
【参考方案3】:添加处理程序后,您需要重新启动 Apache 服务器。
还要检查扩展是否真的会被服务器以您希望的方式解释。您可以从托管服务提供商的系统管理员处查看此类信息。许多系统管理员禁用某些功能以提高安全性。
【讨论】:
以上是关于AddHandler 不适用于 .php 文件 - Apache 2.4的主要内容,如果未能解决你的问题,请参考以下文章