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> 
+0

什么相同来源的限制适用于CSS文件:)?对静态内容使用反向代理似乎相当低效 - 为什么不将静态文件部署到您自己的服务器上,代理cdn只是将所服务的每个资产的请求时间/流量加倍。 – AD7six 2012-02-09 08:55:53

FilesMatch规则仅适用于磁盘上的文件 - 一个代理请求不磁盘上的文件,因此不会被FilesMatch规则捕获。

你可能想

<LocationMatch "^/static/.*\.css\.gz$"> 
    ProxyPassReverse/
    .... 
</LocationMatch>