【发布时间】:2012-02-29 10:37:10
【问题描述】:
我要做的就是:
- 将 /static/styles/min.css 重写为 /static/styles/min.css.gz
- 将 /static/scripts/min.js 重写为 /static/scripts/min.js.gz
诀窍是这些文件位于我反向代理到的远程(公共)服务器上。 我这样做是为了解决我们的 javascript 的同源问题,并总体上加快交付速度。 .gz 文件已存在。 无论我做什么,我都无法请求 .js 文件并返回 .gz 文件。 我已经尝试了许多不同的 RewriteConds 无济于事。 我也尝试过启用 RequestHeader unset Accept-Encoding 并注释掉。 Google PageSpeed 一直告诉我它没有收到压缩版本,当我请求使用 curl 并手动设置“Accept-Encoding: gzip, deflate”标头时,我继续收到非压缩版本。我不能将重写放在 .htaccess 文件中,因为反向代理是在 .htaccess 之前处理的,并且我需要在反向代理发生时重写已经生效。我完全不知所措。
这是我的非生产设置(我知道它需要保护):
<VirtualHost *:80>
ServerName ww.test.com
DocumentRoot "/htdocs/public"
Options +MultiViews
AddEncoding x-gzip .gz
AddEncoding gzip .gz
RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteRule ^\.js$ $1\.js\.gz [L]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteRule ^\.css$ $1\.css\.gz [L]
<FilesMatch .*\.css\.gz>
ForceType text/css
Header append Content-Encoding gzip
</FilesMatch>
<FilesMatch .*\.js\.gz>
ForceType text/javascript
Header append Content-Encoding gzip
</FilesMatch>
ProxyRequests off
ProxyPass /static/ http://www.ourCDN.com/ourAccount/environmentName/
<Location /static/>
ProxyPassReverse /
#RequestHeader unset Accept-Encoding
</Location>
<Directory />
Options FollowSymLinks
AllowOverride All
Order deny,allow
</Directory>
</VirtualHost>
【问题讨论】:
-
什么同源限制适用于 css 文件:)?对静态内容使用反向代理似乎效率很低 - 为什么不将静态文件部署到您自己的服务器,代理 cdn 只是将所服务的每个资产的请求时间/流量加倍。