Apache-2.2

htaccess 文件匹配排除

  • November 6, 2013

我的 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 "\.(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

我認為你正在尋找這個:

<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 中的特殊語法,PCRE 是 Apache 使用的正則表達式庫。這是否定的前瞻斷言。

引用自:https://serverfault.com/questions/548056