我为我的网站建立了一些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。如果这些信息还不够,我需要了解更多关于你们的实施情况。