ASCII字符url无法重定向页面



我为我的网站建立了一些facebook登录。我将这个参数发送到Facebook api如下

https://www.facebook.com/dialog/oauth?client_id=myclient_id&redirect_uri=http%3A%2F%2Fmysite.fr%2Fmydir%2Findex.php%253Fpage%253Dlogin&state=mystate&scope=email%2Cpublish_actions

一切都很顺利,直到重定向过程:

http://mysite.fr/mydir/index.php%3Fpage%3Dlogin?code=somecopde

我得到这个错误信息

The requested URL /mydir/index.php?page=login was not found on this server.

但是如果我用redirect_uri中的?替换%3F,一切都会正常到

redirect_uri=http%3A%2F%2Fmysite.fr%2Fmydir%2Findex.php?page%253Dlogin&state=mystate&scope=email%2Cpublish_actions

为什么会这样,我该如何调整呢

看起来你的get参数有双重url编码

:

myclient_id&redirect_uri=http%3A%2F%2Fmysite.fr%2Fmydir%2Findex.php%253Fpage%253Dlogin&state=mystate&scope=email%2Cpublish_actions

让我们试试url解码你的url:http % 3 a % 2 f % 2 fmysite.fr % 2 fmydir % 253 fpage findex.php % % 253 dlogin&状态= mystate&范围=邮件% 2 cpublish_actions

第一次:http://mysite.fr/mydir/index.php%3Fpage%3Dlogin&状态= mystate&范围=邮件,publish_actions

你可以看到?仍然被编码为%3F,而你的=仍然被编码为%3D

要解决这个问题,你不应该对你的url进行两次urlencode。如果这些信息还不够,我需要了解更多关于你们的实施情况。

最新更新