【发布时间】:2015-02-06 11:07:34
【问题描述】:
我已将 apache 设置为需要在特定端口上运行的应用程序的代理,这适用于虚拟主机。现在我需要添加另一个指令,我需要从任何传入请求中删除 /ex/ 并将重写的 url 传递给代理。
我似乎无法同时工作,要么 apache 能够重写 url,但随后无法代理并尝试自己提供请求,或者它在不删除 /ex/ 的情况下正确代理,并且我的应用程序路由失败,因为它正在寻找 /ex/。
这是有效的代理配置(无需重写)。 如何在将 /ex/ 传递给代理之前将其删除?显然apache不能同时[P,R],PT只是按原样转发。
<VirtualHost *:82>
ServerName xxx
ServerAlias xxx
DocumentRoot /opt/xxx
RewriteEngine On
# neither of these works, simply proxies as is to my application, routing fails
# RewriteRule ^ex/(.*) /$1 [L,R]
# RewriteRule ^/ex$ / [L,PT]
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ http://127.0.0.1:11110%{REQUEST_URI} [P,QSA,L]
ProxyPass / http://127.0.0.1:11110/
ProxyPassReverse / http://127.0.0.1:11110/
ProxyPreserveHost on
# this doesn't work either
# ProxyPass /ex http://127.0.0.1:11110/
</VirtualHost>
【问题讨论】:
标签: apache mod-rewrite virtualhost mod-proxy