Rewrite Rule before Proxypass

Having an application running on port 10001 I would like to have a reverse proxy to serve it on hostname/ds . The only problem is that there are hard linked scripts to /scripts/...

That means hostname/ds/ shall get me to localhost:10001/ and hostname/scripts should first rewrite the request url to hostname/ds/scripts/*.

My configuration:

<VirtualHost *:80>
RewriteEngine on
RewriteRule /^scripts/(.*)$ /ds/scripts/$1 [L,PT]   

ProxyPass /ds/ http://127.0.0.1:10001/
ProxyPassReverse /ds/ http://127.0.0.1:10001/

</VirtualHost>

It does not work: hostname/scripts/ gets a 404. while hostname/ds/scripts/ gets the right answer by the application.

According to https://stackoverflow.com/questions/9003358/apache-rewrite-then-proxy-pass PT should work. What am I doing wrong?


Solution 1:

you have a typo in your pattern, try ^/ instead of /^ (latter will never match)

Solution 2:

You can also do this by simply adding a second ProxyPass to match /scripts, like so:

<VirtualHost *:80>
    ProxyPass /scripts/ http://127.0.0.1:10001/
    ProxyPassReverse /scripts/ http://127.0.0.1:10001/

    ProxyPass /ds/ http://127.0.0.1:10001/
    ProxyPassReverse /ds/ http://127.0.0.1:10001/
</VirtualHost>

Solution 3:

I know this thread is already solved but it seems that you are trying to use ProxyPass to reach the web interface of a Synology DiskStation. For anyone who faced the same problem, with the latest version (DSM 5.1-5004 Update 2) I had to use the following config with the following RewriteRules:

<VirtualHost *:80>
    RewriteRule ^/scripts/(.*)$ /ds/scripts/$1 [L,PT]
    RewriteRule ^/webfm/(.*)$ /ds/webfm/$1 [L,PT]
    RewriteRule ^/webapi/(.*)$ /ds/webapi/$1 [L,PT]
    RewriteRule ^/webman/(.*)$ /ds/webman/$1 [L,PT]

    ProxyPreserveHost On
    ProxyRequests Off
    ProxyVia Off
    ProxyPass /ds/ http://192.168.1.10:5001/
    ProxyPassReverse /ds/ http://127.0.0.1:5001/
</VirtualHost>

This obviously is subjected to change with newer versions of DS. I found using FireBug very helpful when searching for the folders that DS requests (that needed to be redirected).