如何使ProxyPassReverse重写相对重定向?

时间:2019-04-09 09:57:10

标签: apache proxypass

我无法使用Apache和ProxyPassReverse进行相对重定向。如果我在后端服务器上使用绝对重定向,即。 Location: http://fake.frontend.com/cat,一切都按预期进行,但是,如果我在后端服务器上使用相对重定向,即。 Location: /cat不起作用。

我正在Debian上使用Apache 2.4.25。

我在代理服务器上具有以下配置:

<Location /test/>
    ProxyPass http://fake.backend.local/
    ProxyPreserveHost Off
    ProxyPassReverse http://fake.backend.local/
    SetOutputFilter INFLATE;proxy-html;DEFLATE
    ProxyHTMLURLMap / /cat/
    ProxyHTMLURLMap fake.backend.local/ /cat/
    ProxyHTMLDocType "<!DOCTYPE html>"
</Location>

当我访问http://fake.frontend.com/cat/上的代理服务器时,将根据是否已登录来重定向后端服务器。如果未登录,我将重定向(302)到/Signin。如果我已登录,我将被重定向(302)到/dashboard。如果后端应用程序在位置标头中使用绝对路径,即http://fake.backend.local/Signin,则浏览器将按预期加载http://fake.frontend.com/cat/Signin。但是,如果后端应用程序用户在位置标头中使用了相对路径,即:/Signin,则浏览器将加载http://fake.frontend.com/Signin(请注意缺少的猫)。

我想在后端使用相对路径,并且仍然重定向到http://fake.frontend.com/cat/Signin。如何配置代理以使用相对位置标头?

1 个答案:

答案 0 :(得分:0)

我发现article on askapache.com有一个示例,其中应将ProxyPassReverse设置为/

更改为以下配置可以解决我的问题:

<Location /test/>
    ProxyPass http://fake.backend.local/
    ProxyPreserveHost Off
    ProxyPassReverse /
    SetOutputFilter INFLATE;proxy-html;DEFLATE
    ProxyHTMLURLMap / /cat/
    ProxyHTMLURLMap fake.backend.local/ /cat/
    ProxyHTMLDocType "<!DOCTYPE html>"
</Location>