W3总缓存,CDN和主题文件


10

我最近更新了WordPress安装的style.css文件。所做的更改是有效的:以管理员身份登录(设置我的博客的目的是,从不为管理员提供该站点的缓存版本,而是“实时”站点),我可以看到它们。

但是我的博客是通过CDN(使用W3 Total Cache)提供的。通过CDN,所做的更改无效:CDN不会提供我主题中修改后的文件。即使修改后我已经上传了它们(“控制台”>“性能”>“ CDN”>“上传主题文件”。

我的CDN在AmazonCloud Front上运行。并且在W3 Total Cache上禁用了Minify。

通过CDN提供的主题文件是一个压缩版本:style.css.gzip

我应该从CDN中“清除”对象还是要等待更多时间(已经超过一周)。是的,我清空浏览器的缓存,以查看更改是否生效。还是我还缺少其他东西?

谢谢,

P.

Answers:


10

你需要

  1. 对文件进行版本控制(通过调用 style.css?ver=xxx.xxx),并确保您的CloudFront发行版已打开“转发查询字符串”。这是更好的选择,因为这意味着您需要做的就是增加查询字符串中的数字,CloudFront将自动获取此文件。

  2. 通过AWS控制台手动使文件无效(编辑发行版时有一个无效选项卡)

要打开“转发查询字符串”,请执行以下操作:

  • 勾选“ i”左侧的复选框,编辑Cloudfront发行版,然后单击工具栏中的“发行设置”按钮
  • 转到“行为”标签
  • 选择该行,然后单击“编辑”
  • 将“转发查询字符串”更改为是
  • 单击“是,编辑”

1
@kaiser yup,日期时间作为版本是对文件进行版本控制的最佳方法。但是,您仍然需要确保在CloudFront中启用了“转发查询字符串”选项,否则您精心制作的版本号将被忽略:P
2012年

谢谢。由于您不熟悉此过程,因此有两个问题要问您。1)“版本化”文件的名称应准确地遵循您给出的示例(带有问号,等号,并用我选择的数字替换所有“ x”)对吗?2)在用于CLoudFront的AWS控制台上,单击表左侧为我为博客创建的分布旁边的“ I”。这使我可以访问发行版的设置。在那里,我可以看到“转发查询字符串”为“ false”。我是否应该使用相同的值来复制“行为”,但对于“
For。Q.

1
1.是的,或者您可以使用@kaiser的好意思,但答案不完整来命名您的文件。2.我将通过以下过程来更新答案
2012年

8

当文件内容更改时,有一个非常简单的“技巧”可以防止缓存:添加版本号,该版本号设置为更改文件的最新日期/时间。

add_action( 'wp_enqueue_scripts', 'wpse61738_non_cached_stylesheet' );
function wpse61738_non_cached_stylesheet()
{
    wp_enqueue_style( 
        'style-main',
        get_stylesheet_directory_uri().'/style.css',
        array(),
        filemtime( get_stylesheet_directory().'/style.css' )
    );
}

这将附加?ver=0123456789到标题中的style.css参考链接。只有修改文件内容后,版本号才会更改。因此,您有一个可以与a)服务器端缓存b)浏览器缓存并自动刷新配合使用的完美解决方案。


好的,这是一个非常有趣的选择:它消除了style.css每次修改后手动对文件进行版本控制的需求(我会忘记在某一点或另一点进行此操作)。现在,如果我可能要问,我应该在哪里添加此代码?我会猜到我的functions.php档案吗?
Parneix

我不知道,您需要在哪里添加此代码。只需搜索您的主题文件,然后将“常规”调用替换为style.css文件即可。我将发布一个简短的更新,以便您可以将其放在functions.php文件中(这仍然意味着您需要删除原始调用)。顺便说一句:这只是@anu答案的补充。(赞扬者仍感激不尽:)
kaiser

1
没问题!我完全理解,此代码的位置可能会根据所使用的主题而改变。我将设法将其添加到我的functions.php文件中。我仍然认为这是@anu提供的解决方案的很好的补充。非常感谢您的帮助。
Parneix

-1

一个简短的答案...

  1. 删除所有主题文件,然后重新上传。有时删除操作会清除CDN

  2. 是的,您可以尝试清除-但删除和重新上传通常更快。

  3. 还请检查W3TC和Amazon中的设置。W3TC中的默认缓存通常为365天。这是31536000秒:)

在Amazon ..中,将存在一个端点重新设置CDN的设置。我知道在Rackspace中默认为24小时。


1
有比这更好的方法了,请参阅我的回答
2012年

“删除所有主题文件,然后重新上传它们。有时,删除操作会清除CDN”,这对我来说意味着要在我的网站上删除它们,对吗?然后在我的WordPress安装中重新上传它们。然后,我想还是通过W3 Total Cache仪表板再次“上传主题文件”吗?
Parneix 2012年

1
@Parneix认真,除非必须删除,否则不要删除所有内容。除非您也从CDN中删除所有内容,否则几乎可以肯定它不会起作用。有很多更好的方法可以使您过时的CSS文件无效
2012年

1
对了谢谢!我很好地注意到了你的建议。我真的很感谢我在这里得到的所有帮助。我不仅在解决问题,而且还在学习新知识。
Parneix 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.