В моем htaccess есть следующая директива
<filesMatch "\.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml|html?)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>
Я скопировал это регулярное выражение где-то в Интернете несколько месяцев назад. Он должен добавлять эти заголовки в любой HTTP-ответ, который НЕ имеет этих расширений.
Но не работает, добавляет их в любой ответ.
Мне также нужно создать другую директиву, чтобы добавить Header set Cache-Control "max-age=3600, public"
к ответам файлов, что они ЕСТЬ.
Может ли кто-нибудь помочь мне сделать правильные регулярные выражения fileMatch?
Я думаю, что вы это ищете:
<FilesMatch ".*$">
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</FilesMatch>
<FilesMatch "(?!\.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml|html?))$">
FileETag None
<IfModule mod_headers.c>
Header set Cache-Control "max-age=3600
</IfModule>
</FilesMatch>
(?! ...)
- это специальный синтаксис в регулярных выражениях Perl и в PCRE, библиотеке регулярных выражений, которую использует Apache. Это утверждение отрицательного просмотра вперед.
попробуй использовать
<Files ~ "\.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml|html?)$">
инструкция.
Также убедитесь, что вы правильно настроили AllowOverride для этого виртуального хоста.
В вашей конфигурации есть несколько ошибок с заглавными буквами:
<filesMatch "\.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml|html?)$">
^
should be <FilesMatch ...
<ifModule mod_headers.c>
^
should be <IfModule...
</ifModule>
^
should be </IfModule>
</filesMatch>
^
should be </FilesMatch>
Кроме того, если у вас есть VirtualHosts, вам необходимо убедиться, что у вас правильно настроен AllowOverride.