我们最近将我们的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))">
但是,根据我的正则expression式知识,这将在文件名中的任何位置匹配“php”文件。 我发现需要匹配这个其他问题的“空”情况。 我们也尝试了使用相同结果的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文件匹配。
<Files "*.php">工作
尝试另一个比标题,比如redirect页面:
<Files "*.php"> redirect 301 / /anyPage.htm </Files>
如果你想用正则expression式做同样的事情,你可以这样做
<Files ~ "\.php"> redirect 301 / /anyPage.htm </Files>
如果你想使比赛没有任何和任何PHP页面:
<Files ~ "(^$|\.php)"> redirect 301 / /anyPage.htm </Files>
使用filematch:
<FilesMatch "(^$|\.php)"> redirect 301 / /anyPage.htm </FilesMatch>
你可以使testing它将工作。
我怀疑你有其他地方的某个地方覆盖你的头
这似乎与fastcgi和php-fpm的东西有关。
不知道这是如何通过testing….
如果请求的文件是由php-fpm处理的,那么指令不会被处理。
如果相反,文件不是由php-fpm处理的(其中包括对缺less的php文件的404响应),则处理这些指令。