Назад | Перейти на главную страницу

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» в любом месте имени файла. Я обнаружил необходимость сопоставить "нулевой" регистр из этот другой вопрос. Мы также пробовали 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), затем директивы являются обработанный.