如何使 ProxyPassReverse 重写相对重定向?
How do I make ProxyPassReverse rewrite relative redirects?
我无法使用 Apache 和 ProxyPassReverse 进行相对重定向。如果我在 back-end 服务器上使用绝对重定向,即。 Location: http://fake.frontend.com/cat
,一切都按预期进行代理,但是如果我在 back-end 服务器上使用相对重定向,即。 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/
上的代理服务器时,back-end 服务器根据是否登录被重定向。如果没有登录,我将被重定向 (302) 到 /Signin
。如果我登录,我将被重定向 (302) 到 /dashboard
。如果 back-end 应用程序在位置 header 中使用绝对路径,即:http://fake.backend.local/Signin
我然后浏览器按预期加载 http://fake.frontend.com/cat/Signin
。但是,如果后端应用程序在位置 header 中使用相对路径,即:/Signin
浏览器加载 http://fake.frontend.com/Signin
(注意丢失的猫)。
我想在后端使用相对路径,但仍会被重定向到 http://fake.frontend.com/cat/Signin
。如何配置代理以使用相对位置 headers?
我发现 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>
我无法使用 Apache 和 ProxyPassReverse 进行相对重定向。如果我在 back-end 服务器上使用绝对重定向,即。 Location: http://fake.frontend.com/cat
,一切都按预期进行代理,但是如果我在 back-end 服务器上使用相对重定向,即。 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/
上的代理服务器时,back-end 服务器根据是否登录被重定向。如果没有登录,我将被重定向 (302) 到 /Signin
。如果我登录,我将被重定向 (302) 到 /dashboard
。如果 back-end 应用程序在位置 header 中使用绝对路径,即:http://fake.backend.local/Signin
我然后浏览器按预期加载 http://fake.frontend.com/cat/Signin
。但是,如果后端应用程序在位置 header 中使用相对路径,即:/Signin
浏览器加载 http://fake.frontend.com/Signin
(注意丢失的猫)。
我想在后端使用相对路径,但仍会被重定向到 http://fake.frontend.com/cat/Signin
。如何配置代理以使用相对位置 headers?
我发现 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>