我的 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>
几个月前,我从 Web 上的某个地方复制了该正则表达式。它应该将这些标头添加到任何不包含这些扩展的 HTTP 响应中。
但它不起作用,它将它们添加到任何响应中。
我还需要创建另一个指令来添加Header set Cache-Control "max-age=3600, public"
到确实有它们的文件的响应中。
有人能帮助我制作正确的 fileMatch 正则表达式吗?
答案1
您的配置中有一些大写错误:
<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
答案2
我认为你正在寻找这个:
<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 使用的正则表达式库)中的特殊语法。它是否定前瞻断言。
答案3
尝试使用
<Files ~ "\.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml|html?)$">
操作说明。
还要检查您是否已为此虚拟主机正确配置了 AllowOverride