htaccess 文件匹配排除

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>

几个月前,我从 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

相关内容