【问题标题】:htaccess caching not workinghtaccess缓存不起作用
【发布时间】:2016-04-26 19:39:38
【问题描述】:

我将以下内容输入到我的“.htacces”文件中以开始缓存 Web 内容。根据 Google Page Speed 和 Yslow,页面仍未缓存。模块错了吗?还是应用程序没有正确显示数据?

网站在服务器上的 Apache 2.0 上运行

.htaccess(部分带有缓存模块):

# Expire headers
<ifModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
  ExpiresByType text/html "access plus 600 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
 
# Cache-Control Headers
<ifModule mod_headers.c>
#month
  <filesMatch "\.(ico|jpe?g|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>
#week
  <filesMatch "\.(css|js)$">
    Header set Cache-Control "max-age=604800, public"
  </filesMatch>
#day
  <filesMatch "\.(x?html?|php)$">
    Header set Cache-Control "max-age=43200, private, must-revalidate"
  </filesMatch>
</ifModule>
# END Cache-Control Headers
 
# Turn ETags Off
<ifModule mod_headers.c>
  Header unset ETag
</ifModule>
FileETag None
 
# Remove Last-Modified Header
<ifModule mod_headers.c>
  Header unset Last-Modified
</ifModule>

【问题讨论】:

  • 检查已发送的 Expires 标头。使用 Chrome 开发者工具,或 firebug 中的 net-tab。可能是 htaccess 被禁用,或者 mod_expires 没有启用。

标签: .htaccess caching


【解决方案1】:

进入httpd.conf 并查找mod_expires 行,它不应该被注释掉。查找mod_headers 行并确保它没有被注释掉。

或者(不是针对关键应用程序)有一个简单而肮脏的测试:删除 &lt;ifModule mod_expires.c&gt;&lt;/ifModule&gt; 在两者之间留下东西,&lt;ifModule mod_headers.c&gt; 也是如此,如果您的服务器因 500 互联网服务器错误而失败,那么您的可能缺少这些模块中的一个或两个,并且它们未启用。如果是这样,请进入 httpd.conf 并启用您需要的内容。

您还可以使用REDbot 之类的工具测试您网站的响应标头。只需选择一个资源 URL,例如指向图像的 URL,然后将其粘贴到工具中,即可查看返回的标头以及一些建议。请注意,它遵循域的 robots.txt 规则,如果不允许,则不会检查资源。

正如 Gerben 所说,使用 firefox、chrome 开发工具或一些等效的 Web 开发工具中的 net 选项卡有助于查看正在发送和接收的标头。

您也不需要设置Cache-Control public。如果您还使用ExpiresByType 呼叫,则不需要使用max age

欲了解更多信息,请阅读这篇精彩的教程:http://www.mnot.net/cache_docs/

并通过示例学习:在html5-boilerplatehttps://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess 中查看它是如何完成的

对于其他流行的服务器配置示例,如 lighthttpdNode.jsNginx 等,请参阅: https://github.com/h5bp/server-configs

【讨论】:

  • 这篇文章底部@Anthony 链接到的 html5-boilerplate 示例非常有帮助。例如,我写的是jpg 而不是jpeg。谢谢!
猜你喜欢
  • 2014-11-03
  • 2017-01-09
  • 1970-01-01
  • 2017-01-20
  • 2014-12-24
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多