2014-10-20 93 views
0

由于谷歌的做法爬行AJAX填充内容的一部分,我有一个.htaccess文件如下:这个简单的mod重写规则是怎么回事?

RewriteEngine on 

#snapshot requests 
RewriteCond %{QUERY_STRING} _escaped_fragment_=([^&]+) 
RewriteRule ^.*$ system/snapshot_mode.php?project=%1 

我喜欢触发

http://myserver.co.uk/?_escaped_fragment_=token 

用URL规则..但它无法转到指定的页面。它确实,但是,如果我删除重定向的查询字符串部分,即其更改为

RewriteRule ^.*$ system/snapshot_mode.php 

是什么回事?

[编辑]

我添加了一个[R-302]到规则,它现在试图给我重定向到脚本,但通过一个错位,本地机文件路径,即

http://localhost/C:/xampp/htdocs/docula/system/snapshot_mode.php?project=token 

...并给出我403访问被拒绝的错误。

+0

如果您将'[R = 302]'标志添加到'RewriteRule' - 它在哪里重定向您? – Cheery 2014-10-20 21:41:53

+0

@Cheery - 请参阅编辑。 – Utkanos 2014-10-20 21:50:07

+0

'并给予ms 403访问被拒绝错误。 WTF?没关系,正如你所看到的那样 - 它解析和替代一切。你的服务器的根目录或文件夹中有.htaccess文件吗? – Cheery 2014-10-20 21:51:04

回答

0

试试这个:

RewriteEngine on 
RewriteCond %{QUERY_STRING} _escaped_fragment_=([^&]+) 
RewriteRule ^.*$ system/snapshot_mode.php?project=%1 [L,QSA] 

的RewriteRules和查询字符串

  • 通过默认,一个RewriteRule不会改变查询字符串。因此,在RewriteRule中不需要QueryString。如果您没有向替换URL添加参数,则RewriteRule将传入的查询字符串保持不变。

  • 如果要添加新的参数,原始查询字符串将被丢弃,重写的URL将只获取新参数。

  • 如果你想原来的查询字符串和新的参数组合在一起,则可以使用Query String Append [QSA]标志追加它。

在代码中,你有没有[QSA]标志,因此_escaped_fragment_=([^&]+)参数被丢弃的新参数project=%1,使得的RewriteCond银行足球比赛失败。


另外注意:

  • [R-302]是不正确的语法。它应该是[R = 302]
  • [QSD] - 查询字符串放弃标志不是我们想要的在这种情况下。