在HTaccess中重写规则和301重定向冲突

时间:2013-06-06 12:20:07

标签: .htaccess

我有一个基本的重写规则,将所有 / pagenames / 转换为 index.php?page = pagename

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/$ /index.php?page=$1 [L]

这很好但我现在需要将所有旧流量从谷歌重定向到新网址。当我添加以下内容时:

Redirect 301 /pagename.php http://www.website.co.uk/pagename/

所有页面都重定向到此:

http://www.website.co.uk/?page=pagename

有人可以帮我找出原因吗?

由于 丹

1 个答案:

答案 0 :(得分:2)

你不要为此混合mod_alias和mod_rewrite并通过mod_rewrite本身处理所有规则以便更好地控制:

RewriteRule ^(pagename/?)$ http://www.website.co.uk/$1 [R=302,L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/$ /index.php?page=$1 [L,QSA]

这些规则的排序非常重要。

验证一切正常后,将R=302替换为R=301。在测试mod_rewrite规则时,请避免使用R=301(永久重定向)。