問題描述

我最近更新了我的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。