【问题标题】:Drupal 7.0 caching problem!Drupal 7.0 缓存问题!
【发布时间】:2011-06-23 07:21:06
【问题描述】:

我刚刚完成了一个 drupal 项目,并且正在经历网站的优化阶段。我在性能下检查了缓存块和 CSS 和 JS 聚合,以获得更好的加载时间。但我注意到,当我运行页面速度测试或 Yslow 时,一切都通过了,但利用浏览器缓存。似乎并非所有图像和 css 文件都设置了到期日期。我的问题是我必须编辑 .htaccess 文件还是需要将未缓存到特定文件夹中的图像和 css 文件?

任何帮助表示赞赏,非常感谢提前

【问题讨论】:

    标签: drupal .htaccess caching drupal-7


    【解决方案1】:

    您可以配置 Apache 以使用 mod_expiresmod_headers 为您的 image/css/js 文件设置特定的过期/缓存控制标头。

    这里有几个例子(一般例子——在应用到你的系统之前分析和查阅手册):

    <FilesMatch "\.(html|htm|js|css)$">
        FileETag None
        <IfModule mod_headers.c>
            Header unset ETag
            Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
            Header set Pragma "no-cache"
            Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
        </IfModule>
    </FilesMatch>
    

    同时使用 mod_expires + mod_headers 进行缓存

    # Turn on Expires and set default to 0
    ExpiresActive On
    ExpiresDefault A0
    
    # Set up caching on media files for 1 year (forever?)
    <FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
        ExpiresDefault A29030400
        Header append Cache-Control "public"
    </FilesMatch>
    
    # Set up caching on media files for 1 week
    <FilesMatch "\.(gif|jpg|jpeg|png|swf)$">
        ExpiresDefault A604800
        Header append Cache-Control "public"
    </FilesMatch>
    
    # Set up 2 Hour caching on commonly updated files
    <FilesMatch "\.(xml|txt|html|js|css)$">
        ExpiresDefault A7200
        Header append Cache-Control "proxy-revalidate"
    </FilesMatch>
    
    # Force no caching for dynamic files
    <FilesMatch "\.(php|cgi|pl|htm)$">
        ExpiresActive Off
        Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
        Header set Pragma "no-cache"
    </FilesMatch>
    

    【讨论】:

    • 非常感谢您的回复,我已经尝试了您上面提到的所有设置,但我仍然在页面速度上获得相同的分数!我不知道我做错了什么?如果您想亲自查看,这里是我网站的链接。 backbone-design.com 顺便说一句,我正在使用在线页面速度,可以在这里找到:pagespeed.googlelabs.com 提前非常感谢
    • @Nino 使用 FireBug 的“Net”面板或类似工具(如果您使用其他浏览器)并检查实际的响应标头。如果它们不是您设置的,那么您必须深入研究您的 Web 服务器配置(或者如果 image/css/js 是动态生成/提供的,则为您的代码)以查看可能覆盖这些设置的内容。
    • @Nino 你的标题肯定没有 ExpireCache-Control 标题用于图像和 css 文件。您必须检查为什么上述配置文件指令不起作用。 2 可能的事情:1).htaccess 文件未解析或该部分永远不会被执行 2)其他东西覆盖了这些标签。
    【解决方案2】:

    我有同样的问题很长一段时间,我才找到诀窍!

    查看位于drupal 根存储库上的.htaccess 后,出现以下情况: &lt;IfModule mod_expires.c&gt; ... &lt;/IfModule&gt;

    里面的代码没有被执行,因为我的服务器上没有启用 apache 的 expires_module,请检查 expires_module 是否存在于返回的列表中:

    sudo apache2ctl -M
    

    如果没有,只需通过以下方式激活它:

    sudo a2enmod expires
    sudo a2enmod headers
    sudo service apache2 restart
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      相关资源
      最近更新 更多