ubuntu 14.04 Apache 2.4.7 mpm_event 文件和 FilesMatch 不起作用

ubuntu 14.04 Apache 2.4.7 mpm_event 文件和 FilesMatch 不起作用

我们最近将 Apache 2.4.7 模式从 mpm_pre-fork 切换到 mpm_event。从那时起,我们就无法让我们的Files指令正常工作了。

<Files "*.php">
  Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0"
</Files>

我确实设法解决了这个错综复杂的问题:

<Files ~ "((^$)|(php))">

但是,根据我的正则表达式知识,这将匹配文件名中任何位置带有“php”的文件。我发现需要匹配“null”的情况来自另一个问题我们也尝试过,FilesMatch结果是一样的。

从 Apache 2.4 文档中我了解到的情况来看,这一切都毫无意义。有其他人见过类似的问题吗?

更新:我将服务器恢复到 mpm_preforker 和 mod_php,没有任何变化。然后我清除了 apache 和 php,重新安装为 mpm_preforker,它又可以正常工作了。然后我升级到 mpm_event 和 php-fpm,过了一会儿它就停止工作了。我正在尝试找出问题所在,并将发布我发现的情况。

更新2:这似乎与 fastcgi 或 php-fpm 有关。我有两个<Files>指令,一个用于生成唯一标头html,另一个用于php生成唯一标头:

<Files *.html>
   Header always set X-Aaron-files "html match"
</Files>
<Files *.php>
   Header always set X-Aaron-files "php match"
</Files>

如果我转到一个虚构的php文件,那么我会收到一个带有标题的 404 消息php-match。但是如果我转到一个真实php文件,那么服务器会执行 php 文件,但不会返回指示php文件匹配的标题。

答案1

<Files "*.php">作品

尝试除标题之外的其他内容,例如重定向页面:

<Files "*.php">
redirect 301 / /anyPage.htm
</Files>

如果你想用正则表达式做同样的事情,你可以这样做

<Files ~ "\.php">
redirect 301 / /anyPage.htm
</Files>

如果您希望匹配任何 php 页面:

<Files ~ "(^$|\.php)">
redirect 301 / /anyPage.htm
</Files>

使用 filematch:

<FilesMatch "(^$|\.php)">
    redirect 301 / /anyPage.htm
</FilesMatch>

您可以进行测试它是否会起作用。

我怀疑你在其他地方得到了一些指令,这些指令覆盖了你的标题

答案2

这似乎与 fastcgi 和 php-fpm 有关。
不确定它是如何通过测试的……

如果请求的文件由 php-fpm 处理,然后是指令不是处理。

如果文件不是由 php-fpm 处理(包括缺少 php 文件的 404 响应),然后是指令处理。

相关内容