简体   繁体   中英

mod_rewrite not working with reverse proxy in vhost

All I am trying to do is:

  • rewrite /static/styles/min.css to /static/styles/min.css.gz
  • rewrite /static/scripts/min.js to /static/scripts/min.js.gz

The trick is that those files are on a remote (public) server which I'm reverse proxying to. I am doing this so I can workaround the same-origin issue with our javascript, and to speed up delivery in general. The .gz files already exist. No matter what I do, I cannot request the .js file and have the .gz file returned. I have tried this with numerous different RewriteConds to no avail. I have also tried it with RequestHeader unset Accept-Encoding enabled, and commented out. Google PageSpeed keeps telling me that it is not receiving the compressed versions, and when I request using curl and manually setting the "Accept-Encoding: gzip, deflate" header, I continue to receive the non-compressed versions. I cannot put the rewrites in the .htaccess file because the reverse proxy is processed before the .htaccess, and I need the rewrite to already be in effect when the reverse proxy happens. I'm at a total loss.

Here is my non-production setup (I know it needs securing):

<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 rules apply only to files on disk - a proxied request isn't a file on disk and therefore won't be captured by a FilesMatch rule.

You probably want

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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