0

嗨,我的.htaccess文件中有这段代码:

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 中使用此代码创建对 seo 友好的 url,如用户登录后http://domain.com/videoid/title url 看起来像http://domain.com/videoid/title?code=fbcode&access_token=fb_access_token

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

另一个编辑:在 Facebook 开发者页面中,我只输入了“使用 Facebook 登录的网站”http://www domainname/ 而在“应用程序域:”上我没有输入任何域。

非常感谢,埃米尔

4

1 回答 1

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} &可以更具体一点,只是&.

于 2013-09-27T08:17:56.100 回答