繁体   English   中英

mod_rewrite无法在vhost中使用反向代理

[英]mod_rewrite not working with reverse proxy in vhost

我要做的就是:

  • 将/static/styles/min.css重写为/static/styles/min.css.gz
  • 将/static/scripts/min.js重写为/static/scripts/min.js.gz

诀窍是这些文件位于我反向代理到的远程(公共)服务器上。 我这样做是为了解决我们的JavaScript的同源问题,并总体上加快投放速度。 .gz文件已经存在。 无论我做什么,我都无法请求.js文件并返回.gz文件。 我尝试了许多不同的RewriteConds都没有用。 我还尝试了启用RequestHeader未设置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>

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

你可能想要

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM