mod_rewrite的不是虚拟主机
问题描述:
所有我试图做反向代理的工作是:mod_rewrite的不是虚拟主机
- 重写/static/styles/min.css到/static/styles/min.css.gz
- 重写/ static/scripts/min.js to /static/scripts/min.js.gz
诀窍是这些文件位于我反向代理的远程(公共)服务器上。 我这样做,所以我可以解决与我们的JavaScript相同的问题,并加快一般交付。 .gz文件已经存在。 无论我做什么,我都无法请求.js文件并返回.gz文件。 我已经尝试过这与许多不同的RewriteConds无济于事。 我也尝试过使用RequestHeader未启用Accept-Encoding,并将其注释掉。 谷歌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>
答
FilesMatch
规则仅适用于磁盘上的文件 - 一个代理请求不磁盘上的文件,因此不会被FilesMatch
规则捕获。
你可能想
<LocationMatch "^/static/.*\.css\.gz$">
ProxyPassReverse/
....
</LocationMatch>
什么相同来源的限制适用于CSS文件:)?对静态内容使用反向代理似乎相当低效 - 为什么不将静态文件部署到您自己的服务器上,代理cdn只是将所服务的每个资产的请求时间/流量加倍。 – AD7six 2012-02-09 08:55:53