Apache-2.2
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 "\.(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 使用的正則表達式庫。這是否定的前瞻斷言。