htaccess浏览器缓存无法正常工作

时间:2017-06-20 14:22:53

标签: php apache .htaccess caching cache-control

我的.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是错误的?!

0 个答案:

没有答案