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

时间:2019-02-16 03:27:36

标签: apache .htaccess caching

当前,我的缓存策略如下:

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

这会将我的CSS文件缓存8天。如果我想将特定文件缓存一年,该怎么办? I saw this answer,所以我尝试这样做:

<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>

以防万一,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>

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

2 个答案:

答案 0 :(得分:1)

events = pygame.event.get() pressed = pygame.key.get_pressed() for event in events: if event.type == pygame.KEYDOWN: if pressed[pygame.K_w]: print("w is pressed") elif pressed[pygame.K_s]: print("s is pressed") <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>
$ curl -s -v example.com/bootstrap.css 2>&1 | grep Cache-Control
< Cache-Control: max-age=31536000

答案 1 :(得分:0)

有两种方法可以实现此目的。一个是您在这里提到的。实际上,max-age是一个参数,它告诉浏览器应在多少秒后过期。因此,您可以计算一年的秒数,即为“ 31557600”

另一种简单的方法是实现这一目标:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>