这个简单的mod-rewrite规则有什么用呢?

时间:2014-10-20 21:03:11

标签: ajax apache mod-rewrite redirect web-crawler

作为Google抓取AJAX填充内容的方法的一部分,我在.htaccess文件中有以下内容:

RewriteEngine on

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

我使用类似

的网址触发规则
http://myserver.co.uk/?_escaped_fragment_=token

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

RewriteRule ^.*$ system/snapshot_mode.php

这是怎么回事?

[编辑]

我在规则中添加了[R-302],它现在尝试通过损坏的本地机器文件路径将我重定向到脚本BUT,即

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

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

1 个答案:

答案 0 :(得分:0)

试试这个:

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

重写规则和查询字符串

  • 通过默认RewriteRule不会更改查询字符串。因此,RewriteRule中不需要QueryString。如果您没有向替换网址添加参数,RewriteRule会传入传入的查询字符串。

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

  • 如果要合并原始查询字符串和新参数,可以使用Query String Append [ QSA ]标记附加它。

在您的代码中,您有一个没有[QSA]标志的新参数project=%1,因此_escaped_fragment_=([^&]+)参数被丢弃,使 RewriteCond ition失败。


另请注意:

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