Mod rewrite FB PHP SDK和mod_重写:getUser返回0

Mod rewrite FB PHP SDK和mod_重写:getUser返回0,mod-rewrite,facebook-php-sdk,Mod Rewrite,Facebook Php Sdk,我使用Facebook PHP SDK是为了允许用户使用Facebook登录我的网站。 在我下面的测试中(假设URL为) 除了在应用程序设置中设置的域之外,您将无法使用任何其他域 “确保您使用的是根域,而不是sample.com/test/作为url设置。”在服务器端流中,将使用查询字符串中的必要值作为get参数调用重定向uri get 'redirect\u uri'=>“http://{$\u SERVER['http\u HOST']}/FBtest/” 有了这个重定向uri http:/

我使用Facebook PHP SDK是为了允许用户使用Facebook登录我的网站。
在我下面的测试中(假设URL为)


除了在应用程序设置中设置的域之外,您将无法使用任何其他域


“确保您使用的是根域,而不是sample.com/test/作为url设置。”

在服务器端流中,将使用查询字符串中的必要值作为get参数调用重定向uri get

'redirect\u uri'=>“http://{$\u SERVER['http\u HOST']}/FBtest/”

有了这个重定向uri

http://example.com/FBtest/?state=foo&code=bar
将在您的服务器上调用

RewriteRule^/FBtest/(.*)$http://%{http_HOST}/test/FBtest.php$1

重写规则不检查查询字符串,它们只查看URL的路径组件。在您的例子中,这是
/FBtest/
,后面没有任何内容–因此内部重定向转到
/test/FBtest.php
,查询字符串参数丢失,因为您没有说要传递它们


将“查询字符串附加”的标志
[QSA]
–添加到您的重写规则中(并删除不必要的
(.*)
)–然后事情应该按预期进行,因为您的fbtest.php将获得身份验证过程所需的查询字符串参数。

最终解决了这个问题。以下是我需要的规则:

RewriteRule ^/FBtest/$ http://%{HTTP_HOST}/test/fbtest.php [QSA,NE]
事实证明,我需要将QSA和NE标志添加到此规则中

与CBroe的回答非常相似,添加到重定向uri的状态/代码参数需要QSA标志(在重写规则中使用
(.*)
,而不捕获这些附加参数)


我还需要添加NE标志,因为Facebook身份验证添加到重定向uri的状态/代码正在转义。

HTTP\u主机很可能是同一个域。我相信如果您尝试从未指定的域进行身份验证,Facebook通常会重定向到错误页。感谢您的响应。我不知道
[QSA]
标志,我认为
(.*)
将捕获添加到重定向uri的任何GET参数,并根据需要附加它们。不幸的是,我做了这些更改,但问题仍然存在。那么,从脚本生成一些调试输出(var_dump of$\u GET,$\u POST,$\u COOKIE…),并比较调用脚本的两种方法。有什么显著的区别吗…?我确实看到了一些东西。在重定向测试中,$\u会话为空。在成功测试中,它包含代码、访问令牌和用户id参数$_GET和PHPSESSID在两个测试中都正确通过。会话cookie设置的路径是什么?嗯,那么我就不知道了(不容易调试“远程”)。无论如何,还要在登录之前和之后打印会话id和$\u COOKIE内容–空会话清楚地指向会话id未正确传输的方向。
RewriteRule ^/FBtest/$ http://%{HTTP_HOST}/test/fbtest.php [QSA,NE]