Mod_rewrite - 删除问号,而不仅仅是查询字符串

时间:2011-11-24 16:34:16

标签: mod-rewrite query-string

我需要将mydomain.com/index.php等网址重定向到mydomain.com /

这听起来很简单,但软件框架也使用像mydomain.com/index.php这样的网址?这些网址(带有单个添加的问号)不应重定向到mydomain.com。

使用

无法解决问题
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ /? [L,R=301]

因为这会替换/搜索完整的查询字符串,例如foo = bar但不是单个问号。

如何设法仅重定向index.php?我希望somone可以帮助我,因为我是mod_rewrite和正则表达式的绝对新手。

1 个答案:

答案 0 :(得分:0)

你只需要这个:

RewriteRule ^index\.php$ ^$ [R=301,QSA,L]

注意:这是针对这种情况:浏览器中的用户键入mydomain.com/index.php并透明地重定向到mydomain.com/(并且在浏览器中可见)。

如果你想要相反,这应该有效:

RewriteRule ^$ /index\.php [R=301,QSA,L]

这也会进行重定向(在浏览器中,网址会从mydomain.com/index.php更改为mydomain.com/

请告诉我它是否有效。

[更新]

如果您不想要/index.php?之类的网址和有查询字符串的网址,您只需要:

# if QUERY_STRING is empty...
RewriteCond %{QUERY_STRING} ^$
# ... then try to apply the rule
RewriteRule ^index\.php$ ^$ [R=301,QSA,L]