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

htaccess файлы Исключение соответствия

В моем 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.