仅当没有查询字符串时如何重定向 index.php?

Nic*_*ick 2 mod-rewrite apache-2.2

如何创建仅匹配没有查询字符串的请求的重写规则?

http://www.mysite.com/index.php
Run Code Online (Sandbox Code Playgroud)

应该重新映射到:

http://www.mysite.com/
Run Code Online (Sandbox Code Playgroud)

 http://www.mysite.com/index.php?page=some_page
Run Code Online (Sandbox Code Playgroud)

应该单独留下。

我正在尝试这个:

RewriteRule ^/index.php$   http://www.mysite.com/ [R=301,L]
Run Code Online (Sandbox Code Playgroud)

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

更新:

在此之前的唯一规则是:

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

目的是将非 www 链接重定向到 www 版本。

Sam*_*cke 5

此处第一组规则上的 [L] 标志:

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

L 意味着 Last -- Apache 将在达到此迭代时停止处理此迭代规则。

取下L标志,你应该没事。