我的.htaccess文件忽略了整个浏览器缓存的内容。我在同一台服务器上有多个域,在其中一个域中,相同的代码工作正常。我的测试工具是WebPageTest.org。
<IfModule mod_filter.c>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript application/x-javascript
AddType image/svg+xml .svg
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 12 hours"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType text/html "access plus 4 hours"
ExpiresByType text/htm "access plus 4 hours"
ExpiresByType text/javascript "access plus 5 days"
ExpiresByType text/x-javascript "access plus 5 days"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/xml "access plus 2 days"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType text/cache-manifest "access plus 0 seconds"
</IfModule>
我阅读了很多关于这个问题的主题,但大多数人都说mod_expires模块已停用。我检查了我的phpinfo()
输出,这个模块已经加载了(也是mod_deflate和mod_filter)。
在下面的帖子htaccess caching not working中,Anthony Hatzopoulos给出了一个很棒的答案,我使用REDbot网站来分析我的HTTP标头。它始终显示
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
如果我使用header("Cache-Control: max-age=2592000");
手动设置缓存控件,HTTP Header看起来很好,但.htaccess中的浏览器缓存规则仍然会被忽略。
我不明白为什么Cache-Control使用no-store, no-cache, ...
作为默认值,我可以在哪里更改它。此外,我注意到我的phpinfo()
输出中未列出mod_header模块,FileMatch
标记导致内部服务器错误而没有ifModule mod_header
检查。但如果这是问题,为什么同一个脚本在另一个域上工作?
非常感谢!
从2017年6月21日开始编辑:
我忘了说我们正在使用CDN(Cloudflare)。我使用REDbot分析了更多Headers,而Cache-Control似乎是正确的(png,Cache-Control: public, max-age=2592000
)。在我的WebPageTest结果中,它始终显示WARNING - (4.0 hours) - (...).png
。 CDN是覆盖标题还是testresult是错误的?!