重定向解码的URL编码参数中的hashtags(#)

时间:2013-09-18 21:43:07

标签: http redirect hashtag

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

但是,如果原始URL包含#,则整个例程都会被清除。似乎浏览器正在解码url编码的参数,因此,在#到场之后丢弃任何内容。我在Chrome,Safari和Firefox上试过这个。

示例:

原始网址:

https://xxx.com/#/main/by-users?param1=53&param2=13&param3=39

重定向网址:

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

浏览器显示:

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

如您所见,#之后和#之后的所有内容都已解码。因此,服务器永远不会获得完整的'returnURL'参数值。它基本上只是

https://xxx.com/

这必须是某个地方某些规范的一部分,尽管看起来很疯狂,编码的#应该被解码和处理,好像它从来没有编码过。但是如何解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:5)

不确定它是否是最佳解决方案,或者即使您可以控制它,但如果您进行双重编码,它可能会有效:例如,而不是“%23”,请使用“%2523”。

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

答案 1 :(得分:2)

你需要URI转义“#”字符。