2013-09-26 25 views
0

您好我有这样的代码在我.htaccess文件:PHP文件执行2次htaccess的重定向和Facebook的登录代码

RewriteOptions inherit 
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http\:\/\/www.%{HTTP_HOST}/$1 [R=301,L] 
Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ([0-9]+)/([a-zA-Z]+)/ embed.php?video=$1 [QSA,L] 
RewriteRule ([0-9]+)/ embed.php?video=$1 [QSA,L] 

,并在embed.php我也有登陆密码(与登录请求,请求代码和状态)每个想工作正常,当用户登录,但会产生两次,并在接下来的error_log错误出现后,用户登录码和状态:[26-Sep-2013 02:02:04 America/Chicago] CSRF state token does not match one provided.

之后,我删除.htaccess中的代码并运行直接embed.php这个文件不会运行两次,CSRF错误不再出现。

在mebed文件中,我使用了一个代码来检查用户是否已经登录,并请求登录,并且在facebook登录后用户重定向回请求url。 我使用此代码htaccess的创建类似的用户后http://domain.com/videoid/title SEO友好的URL登录网址看起来像http://domain.com/videoid/title?code=fbcode&access_token=fb_access_token

任何人都可以帮我解决这个问题呢?

另一个编辑: 在Facebook开发网页我把“网站与Facebook登录”只有HTTP:// WWW域名/ 而在“应用程序域:”我不`吨输入任何域名。

非常感谢, 埃米尔

+0

如果你重定向到你的'embed.php'文件的原始URL,你不会得到一个重定向循环。也许这就是发生了什么,但是当CSRF错误出现时,你不重定向? – Qben

+0

是的,当我删除htaccess或从htaccess删除重定向时,错误不会显示。当删除htaccess并使用embed.php?video = id文件时,facebook用户登录后只会在embed.php?video = id&code = fbcode&access_token = fb_access_token上重定向一次,并且CSRF错误不会出现在errror_log中。也许问题是因为我在FB上设置了网站上的应用程序设置,使用FB登录链接http:/domain.com/,当我使用htaccess重定向用户时,重定向到domanin,com/videoid /而不是根域。可能这是问题吗? –

回答

0

也许这可以工作,如果我正确地理解你的问题(我将使用anubhavas解决方案的基础,因为它是推行清洁),基本上我不重写请求如果QUERY_STRING至少包含一个&,因为它已经被embed.php本身在这一点上改写:

Options +FollowSymLinks -MultiViews 
    RewriteOptions inherit 

    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

    RewriteCond %{QUERY_STRING} & 
    RewriteRule^- [S=1] 
    RewriteRule ^([0-9]+)/ embed.php?video=$1 [QSA,L] 

如果需要RewriteCond %{QUERY_STRING} &可能会多一点具体的,只是&

+0

我尝试你的解决方案,但不工作,用户安装后,并允许Facebook应用程序用户在Facebook页面中保持堆栈,并且不会在call_back_url上返回。我在我的问题上写的是为什么我的页面在用户安装后允许加载两次,并允许在facebook上使用应用程序,并且在使用$ _GET for access_token后,代码和来自Facebook的状态生成了两次,这是当我仅使用htaccess重定向时embed.php?video = id,这个页面不会被加载两次(并且代码和状态不会产生2次)。当我尝试将此解决方案保留在页面facebook.com/app-id&permision中时,不会返回到我的域名。 –