重定向后反向代理不重写位置

Reverse proxy not rewriting location after redirect

我有一个像这样设置的 apache 反向代理:

<Location /test>
  ProxyPass https://exampleUrl.com retry=0 ttl=50
  ProxyPassReverse https://exampleUrl.com
</Location>

我正在向 https://localUrl/test/login.php?token=

发送用于登录的令牌以及我的请求 我被远程服务器重定向,反向代理将位置正确重写为:/test/sso.php?id=61127

我对 /test/sso.php?id=61127 的请求再次被重定向,但这次位置没有正确重写:/status/sso.php

所以它试图在我自己的服务器上找到资源,而它应该指向代理:/test/status/sso.php

我做错了什么,为什么第二个重定向位置没有重写?

首先,您应该始终匹配 ProxyPass 指令中的斜杠,也就是说,在本例中:https://exampleUrl should be https://exampleUrl/ 因为它就是这样,您应该在 ProxyPassReverse 指令中执行相同的操作。

无论如何,最好检查后端的回复,将以下内容添加到您正在使用的 LogFormat 中:

%{Location}o

它将打印后端发送的任何位置,并帮助您了解出了什么问题,如果匹配的斜线不能解决您的问题,以防您的后端发送了您没有代理的 /status/。