目前,我的缓存策略是这样的:
<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天。
发布于 2019-02-16 16:29:42
<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$ curl -s -v example.com/foo.css 2>&1 | grep Cache-Control
< Cache-Control: max-age=691200发布于 2019-02-16 12:22:51
有两种方法可以实现这一点。一个是你在这里提到的。实际上,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>https://stackoverflow.com/questions/54719621
复制相似问题