如何创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: /");