URL编码参数中的井号(#)在重定向时解码

tic*_*ock 0 redirect http hashtag

我有两个服务器系统...一个托管应用程序,另一个托管身份验证/授权。当应用程序检测到用户尚未登录时,它将重定向到身份验证服务器,并将用户最初请求的URL作为参数传递,以便在身份验证之后,用户将被重定向回应用程序服务器到最初请求的确切网址。

但是,如果该原始URL包含#,则将执行整个例程。看来浏览器正在解码url编码的参数,因此,将#号之后的所有内容都放到了地板上。我已经在Chrome,Safari和Firefox上尝试过此操作。

例:

原始网址:

https://xxx.com/#/main/by-users?param1=53&param2=13&param3=39
Run Code Online (Sandbox Code Playgroud)

重定向网址:

https://yyy.com/signin/?returnURL=https%3A%2F%2Fxxx.com%3A80%2F%23%2Fmain%2Fby-users%3Fparam1%3D53%26param2%3D13%26param3%3D39
Run Code Online (Sandbox Code Playgroud)

浏览器显示:

https://yyy.com/signin/?returnURL=https%3A%2F%2Fxxx.com%2F#/main/by-users?param1=53&param2=13&param3=39
Run Code Online (Sandbox Code Playgroud)

如您所见,包括#和之后的所有内容均已解码。因此,服务器永远不会获得完整的“ returnURL”参数值。基本上就是

https://xxx.com/
Run Code Online (Sandbox Code Playgroud)

这一定是某个规范的一部分,尽管似乎应该疯狂地对已编码的#进行解码和处理,就好像它从来没有被编码过一样。但是如何解决这个问题?

谢谢。

Kwa*_*eco 6

不知道这是最佳解决方案还是可以控制,但是如果您进行双重编码可能会起作用:例如,使用“%2523”代替“%23”。

然后,不需要的解码应将“%2523”转换为“%23”,从而将所需的结果保留在浏览器显示的重定向URL中。