问题描述

我最近更新了我的 WordPress 安装的 style.css 文件。更改是有效的:当以管理员身份登录时 (我的博客设置为使管理员从不服务于该网站的缓存版本,而是一个 「live」),我可以看到它们。

但是我的博客通过 CDN(使用 W3 Total Cache) 进行服务。通过 CDN,更改无效:CDN 不会从我的主题提供修改的文件。即使我已经修改后上传 (Dashboard> Performance> CDN> 上传主题文件。

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

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

我应该从我的 CDN 「purge」 对象或稍等一点 (已经超过一个星期) 。是的,我清空我正在使用的浏览器的缓存,看到更改正在生效。还是有什么我失踪的?

谢谢,

P.

最佳解决方案

你也需要

  1. 版本您的文件 (通过调用它 style.css?ver=xxx.xxx),并确保您的 CloudFront 分发具有 「转发查询字符串」 打开。这是更好的选择,因为这意味着您需要做的是增加查询字符串中的数字,CloudFront 将自动获取该文件。

  2. 通过 AWS 控制台手动使您的文件无效 (编辑分发版时有无效标签)

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

  • 点击’i’ 左侧的复选框,编辑您的 Cloudfront 发行版,然后单击工具栏中的”distribution settings” 按钮

  • 转到 「行为」 选项卡

  • 选择行,然后单击’Edit’

  • 将 「转发查询字符串」 更改为是

  • 点击 「是,编辑」

次佳解决方案

有一个很简单的”trick”,以防止缓存,当文件内容改变时:添加版本号,设置为您更改文件的最新日期/时间。

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) 浏览器缓存和刷新自动。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。