AddHandler对.php文件无效 - Apache 2.4

9
我正在创建一个名为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文件?

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


这个类似吗:http://serverfault.com/questions/593064/php-files-not-working-with-addhandler-apache-2-4 - Twisty
是的,它很相似。但那里没有正确答案。 - vaibhav
3个回答

6

你可能想尝试使用SetHandler代替

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

这会覆盖默认的PHP处理程序。如果我在helloworld_handler中使用“return DECLINED”而不是“return OK”,则默认的PHP处理程序不会评估PHP文件。您能告诉我如何不覆盖默认的PHP处理程序吗? - vaibhav
我从未尝试过,但我认为您可以添加第二个处理程序,将PHP文件发送到application / x-httpd-php5,默认的PHP处理程序。 - Machavity
我已经在问题中添加了编辑部分。你能帮忙吗? - vaibhav
是的,我尝试使用SetHandler,但是文件中的PHP内容没有被评估。 - vaibhav
我不确定这是否仍在原问题的范围内。我能建议的最好的事情是查阅此主题,其中讨论了加载多个版本的PHP的方法:该线程 - Machavity
您提供的链接没有帮助......我的原始问题是使处理程序与php默认处理程序一起工作。然而,当我插入我的处理程序后,默认的php处理程序不会评估该文件。有什么其他方法可以让它工作吗? - vaibhav

0

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参考文档 AddOutputFilter文档

-3

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接