【问题标题】:Apache rewrite or proxy with redirect of internal serverApache 重写或代理与内部服务器的重定向
【发布时间】: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


【解决方案1】:

我通过添加解决了它:

ProxyPreserveHost On

这样就不会转发到上面提到的127.0.0.1了。 所以总的配置 sn-p 是:

RewriteEngine on
RewriteRule ^/bv-via-web/(.*)$ http://127.0.0.1:8040/bv-via-web/$1 [P]
RewriteRule ^/(.*)$ http://127.0.0.1:8040/bv-via-web/$1 [P]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多