如何在没有查询string时只redirectindex.php?

如何创build一个只匹配没有查询string的请求的重写规则?

http://www.mysite.com/index.php 

应重新映射到:

 http://www.mysite.com/ 

  http://www.mysite.com/index.php?page=some_page 

应该一个人留下。

我正在尝试这个:

 RewriteRule ^/index.php$ http://www.mysite.com/ [R=301,L] 

…但是它匹配以/index.php开始的任何内容,即使我已经明确地以一个美元符号结束了这个模式。

更新:

这之前唯一的规则是:

  RewriteCond %{HTTP_HOST} ^mysite.com [NC] RewriteRule ^/(.*) http://www.mysite.com/$1 [R=301,L] 

目的是将非www链接redirect到www版本。

第一组规则中的[L]标志在这里:

 RewriteCond %{HTTP_HOST} ^mysite.com [NC] RewriteRule ^/(.*) http://www.mysite.com/$1 [R=301,L] 

L表示最后 – 当达到这个迭代时,Apache将停止处理规则。

删除L标志,你应该没问题。

这是我提出的解决scheme:

 RewriteCond %{QUERY_STRING} ^$ RewriteRule ^/index.php$ / [R=301,L] 

RewriteCond! %{QUERY_STRING}将匹配没有查询string的请求。

您还可以添加以下内容来打开mod_rewrite的日志logging和debuggingRewriteLog logs / rewrite_log RewriteLogLevel 3

请注意,这可能会降低网站的速度并填满日志,因此只能用于debugging。

所有这些重写都是很慢的RegExps。 如果你从index.php执行它应该会更快一些:

 if (!strlen($_SERVER["QUERY_STRING"])) header("Location: /");