【发布时间】:2018-01-21 01:30:42
【问题描述】:
我正在使用 W3 Total Cache 插件,该插件设置为与基于 AWS 的 CDN (S3+CloudFront) 一起使用:
- 缩小 CSS 和 JS 文件
- 将它们发送到 AWS 的 S3
- S3 将它们发送到 AWS 的 CloudFront
上面的过程似乎工作正常:
-
style.css被缩小为18704.css和 -
script.js被缩小为39633.js。 -
自动上传到 CDN 有效,然后我可以通过在浏览器的地址栏中键入 URL 来手动访问文件:
-
S3 URL 例如
https://<instance>.amazonaws.com/wordpress/wp-content/cache/minify/1/39633.js被找到并 -
CloudFront URL 例如
https://<distribution_id>.cloudfront.net/wp-content/cache/minify/1/39633.js被找到
-
S3 URL 例如
插件的自动 URL 重写(加载网页时)最有可能失败,因为 HTML 标头在 URL 中仍然具有 原始主机名:
<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 为主机的 URL?
Chrome 的网络控制台:缩小的文件是从原始主机而不是 CDN 中提取的
可能的解决方法:
这似乎是一种解决方法,但它确实有效。通过在 .htaccess 文件中指定 RewriteRules,我强制站点通过 CDN 加载 .css 和 .js 文件。
RewriteCond %{REQUEST_URI} \.(css|js)$
RewriteRule ^ https://<distribution_id>.cloudfront.net%{REQUEST_URI} [R,L]
但仍有一个文件拒绝重定向 (18704.css)。我关闭了浏览器缓存(甚至手动删除了浏览器缓存)并且文件仍然拒绝从缓存中加载。我认为这与浏览器缓存无关,Chrome的网络控制台说文件不是从缓存中加载的。
【问题讨论】:
标签: wordpress amazon-s3 minify amazon-cloudfront w3-total-cache