【发布时间】:2014-06-03 00:44:14
【问题描述】:
我正在尝试使用 Apache 作为内部 tomcat 服务器的代理,但是 tomcat 服务器执行的重定向让我抓狂
我首先通过以下方式尝试了 mod_proxy:
ProxyPass / ajp://127.0.0.1:8045/bv-via-web/
ProxyPassReverse / ajp://127.0.0.1:8045/bv-via-web/
当访问/ (root) 时,内部服务器会重定向到不存在的/bv-via-web/hola。它应该重定向到/hola。如何通过 Apache 配置实现这一点?
作为一种解决方法,我添加了以下内容:
ProxyPass /bv-via-web/ ajp://127.0.0.1:8045/bv-via-web/
ProxyPassReverse /bv-via-web/ ajp://127.0.0.1:8045/bv-via-web/
但这不起作用,因为它将 url 扩展到bv-via-web/bv-via-web/hola 的内部请求。所以基本上我想更改网址,但不知道如何使用 mod_proxy。
然后我尝试了 mod_rewrite,如下:
RewriteEngine on
RewriteRule ^/bv-via-web/(.*)$ http://127.0.0.1:8040/bv-via-web/$1 [P,L]
RewriteRule ^/(.*)$ http://127.0.0.1:8040/bv-via-web/$1 [P,L]
但是当我打开网站的根目录时,它会执行重定向,http://127.0.0.1:8040/bv-via-web/hola 会出现在浏览器地址中。
我不明白,由于 [P] 标志,它应该作为内部代理工作。
我做错了什么?
【问题讨论】:
-
P标志不需要L标志,因为它已包含在内。此外,您必须避免在规则中使用前导斜杠。此规则应按预期工作:RewriteRule ^(.*)$ http://127.0.0.1:8040/bv-via-web/$1 [P]。每个请求,例如domain.com/hello/world,都应该转发给http://127.0.0.1:8040/bv-via-web/hello/world -
谢谢贾斯汀。但是,我之前尝试过您的修改(刚刚再次),并进入了日志文件““GET /bv-via-web// HTTP/1.1”404”。这就是我添加斜线的原因。当我通过删除 $1 之前的前导斜杠来修改它时(RewriteRule ^(.*)$ 127.0.0.1:8040/bv-via-web$1 [P]),浏览器将尝试重定向并在浏览器地址栏中出现:“127.0.0.1:8040/bv -via-web/" 如我的帖子中所述(日志文件重定向:GET /bv-via-web/ HTTP/1.1" 302)。
-
这条规则怎么样?
RewriteRule ^/?(.*)$ http://127.0.0.1:8040/bv-via-web/$1 [P]
标签: apache .htaccess mod-rewrite mod-proxy