W3 Total Cache不会重写基于AWS的CDN上缓存的文件的URL

时间:2017-08-12 18:39:51

标签: wordpress amazon-s3 minify amazon-cloudfront w3-total-cache

我正在使用W3 Total Cache插件,该插件设置为使用基于AWS的CDN(S3 + CloudFront):

  1. 缩小CSS和JS文件
  2. 将它们发送到AWS的S3
  3. S3将它们发送到AWS的CloudFront
  4. 上述过程似乎运行良好:

    • style.css缩小为18704.css
    • script.js缩小为39633.js
    • 自动上传到CDN有效,我可以通过在浏览器的地址栏中键入URL来手动访问文件:

      • S3网址,例如找到https://<instance>.amazonaws.com/wordpress/wp-content/cache/minify/1/39633.js
      • CloudFront网址,例如找到https://<distribution_id>.cloudfront.net/wp-content/cache/minify/1/39633.js

    插件的自动网址重写(加载网页时)最有可能失败,因为HTML标头在网址中仍然包含原始主机名

    <script type="text/javascript" src="https://www.example.com/wp-content/cache/minify/1/39633.js"></script>
    <link rel="stylesheet" type="text/css" href="https://www.example.com/wp-content/cache/minify/1/18704.css" media="all" />
    

    为什么W3 Total Cache插件不会重写以CloudFront作为主机的网址?

    Chrome的网络控制台:缩小的文件是从原始主机而不是CDN中提取的

    The minified files get pulled from the original host and not the CDN

    可能的解决方法:

    这似乎是一种解决方法,但它确实有效。通过在.htaccess文件中指定RewriteRules,我强制网站通过CDN加载.css.js个文件。

    RewriteCond %{REQUEST_URI} \.(css|js)$
    RewriteRule ^ https://<distribution_id>.cloudfront.net%{REQUEST_URI} [R,L]
    

    但仍有一个文件可以重定向(18704.css)。我关闭了浏览器缓存(甚至手动删除了浏览器缓存),文件仍然无法从缓存中加载。我认为这与浏览器缓存无关,Chrome的网络控制台表示该文件未从缓存中加载。

    18704.css

1 个答案:

答案 0 :(得分:0)

您需要将minify选项设置为manual,然后使用w3total cache上传minify文件。 enter image description here