Недавно мы переключили наш режим 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» в любом месте имени файла. Я обнаружил необходимость сопоставить "нулевой" регистр из этот другой вопрос. Мы также пробовали 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">
работает
Попробуйте что-то другое, кроме заголовка, например страницу перенаправления:
<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>
Вы можете проверить, все ли работает.
Я подозреваю, что у вас есть какое-то вмешательство где-то еще, которое отменяет ваш заголовок
Похоже, это связано с вещами fastcgi и php-fpm.
Не знаю, как это прошло через тестирование ....
Если запрошенный файл является обрабатывается php-fpm, тогда директивы не обработанный.
Если вместо этого файл не является обрабатывается php-fpm (который включает 404 ответа на отсутствующий файл php), затем директивы являются обработанный.