0

I seem to be having trouble with Apache's mod_rewrite to rewrite URL requests while using it with mod_proxy to act as a reverse proxy. In summary, I'm trying to redirect requests to unminified CSS to my minified CSS located in another directory.

I currently have a web app requesting it's CSS at https://example.com/assets/css/styles.css. I have my minified CSS stored at https://example.com/assets/css/min/styles.min.css. Because I can not change the code where the CSS is linked, I want to use Apache's mod_rewrite to turn all requests for assets/css/styles.css to assets/css/min/styles.min.css.

Also, the web app is currently running on a separate backend server, 192.168.1.100, so I have ProxyPass and ProxyPassReverse set up as

ProxyPass / http://192.168.1.100/
ProxyPassReverse / http://192.168.1.100/

Currently, I've tried adding

<Location /assets/css>  
  RewriteEngine On
  RewriteBase /assets/css
  RewriteCond %{REQUEST_URI} ^/assets/css/((.+)\.css)$
  RewriteCond %{DOCUMENT_ROOT}/assets/css/min/%2.min.css -f
  RewriteRule ^(.+)$ min/%2.min.css [L]
</Location>

I've also tried adding a trailing slash at the end of /assets/css but that didn't do anything. I'm currently at a loss, as I'm not the best at mod_rewrite.

I think it is likely due to the interactions between Mod_Proxy and Mod_Rewrite that is causing the issue. I've taken the Location block snippet from another one of my projects and adapted the file paths appropriately. It was working correctly on that project, which was not using Mod_Proxy and was serving the content directly.

marked as duplicate by Iain, HBruijn Sep 19 '16 at 5:38

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • @Iain thanks for the reference, I seem to having a more specific issue, stemming from the usage of Rewrite and Proxy together, causing issues – Felix Jen Sep 5 '16 at 6:31
  • The second RewriteCond in the Location block suggests you are either serving the ccs file directly from Apache, as opposed to from the backend server, or you copied across the configuration without really understanding how it worked. Can you clarify if you are serving the CSS files from Apache or the backend server? – Unbeliever Sep 5 '16 at 8:25
  • The CSS should be served from the backend server. – Felix Jen Sep 5 '16 at 16:15
0

Your current directives in the <Location> block only work for files that Apache serves directly. The second RewriteCond is a test for a file being present on the file system. It can't test that the back-end server is able to serve that minimised file.

So you will either need to blindly rewrite the URI path to the minimised version or work out how to do the configuration on the back-end.

On your Apache server, something like:

<Location /assets/css>
  RewriteEngine On
  RewriteRule ^/assets/css/([^/]+)\.css$ /path/to/min/$1.min.css [L,PT]
</Location>

Not the answer you're looking for? Browse other questions tagged or ask your own question.