我已将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>
答案 0 :(得分:1)
您可以使用ProxyPassMatch而不是ProxyPass:
ProxyPassMatch ^/ex/(.*) http://127.0.0.1:11110/$1
答案 1 :(得分:0)
简单,这一行
ProxyPass /ex http://127.0.0.1:11110/
应该在
之前ProxyPass / http://127.0.0.1:11110/
as /将匹配所有内容,它是更大的桶然后/ ex,所以ProxyPass /应始终在配置文件中的最后。这意味着如果找不到匹配/模式,则/将在最后处理所有模式。