如何将缓存策略应用于具有 .htaccess 的特定文件?

Joh*_*rry 6 apache .htaccess caching

目前,我的缓存策略如下所示:

<IfModule mod_headers.c>    
  <FilesMatch "\.(css)$">
   Header set Cache-Control "max-age=691200"
  </FilesMatch>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这会将我的 css 文件缓存 8 天。如果我想将特定文件缓存一年,我该怎么做?我看到这个答案,所以我尝试这样做:

<IfModule mod_headers.c>    
  <FilesMatch "\.(css)$">
   Header set Cache-Control "max-age=691200"
  </FilesMatch>
  <FilesMatch "bootstrap\.(css)$">
   Header set Cache-Control "max-age=31536000"
  </FilesMatch>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

除此之外,以防万一 apache 在先到先服务的基础上应用规则(<- 可能是该短语的错误使用):

<IfModule mod_headers.c>    
  <FilesMatch "bootstrap\.(css)$">
   Header set Cache-Control "max-age=31536000"
  </FilesMatch>
  <FilesMatch "\.(css)$">
   Header set Cache-Control "max-age=691200"
  </FilesMatch>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

但是当我通过页面速度洞察运行页面时,bootstrap.css 文件的缓存策略保持不变。我还清除了自己的缓存,打开了隐身选项卡,并检查了开发工具的网络选项卡内的缓存策略,引导文件的缓存策略仍然是 8 天。

Dus*_*jic 7

<Files>和<FilesMatch>部分按照它们在配置文件中出现的顺序进行处理,这意味着最后应用的部分将优先,因此您的第一次尝试应该有效:

<IfModule mod_headers.c>    
  <FilesMatch "\.(css)$">
   Header set Cache-Control "max-age=691200"
  </FilesMatch>
  <FilesMatch "bootstrap\.(css)$">
   Header set Cache-Control "max-age=31536000"
  </FilesMatch>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我已经测试过它并且它按预期工作:

$ curl -s -v example.com/bootstrap.css 2>&1 | grep Cache-Control
< Cache-Control: max-age=31536000
Run Code Online (Sandbox Code Playgroud)
$ curl -s -v example.com/foo.css 2>&1 | grep Cache-Control
< Cache-Control: max-age=691200
Run Code Online (Sandbox Code Playgroud)