htaccess - 重定向不按预期工作?

时间:2014-11-05 16:26:25

标签: .htaccess mod-rewrite redirect url-redirection

我需要在我的网站上设置几个重定向。我的htaccess文件目前是:

RewriteEngine on
RedirectMatch 301 ^/browse/ http://www.mysite.co.uk/designs
Redirect /designs http://www.mysite.co.uk/our-designs

重定向#1 - 我需要将以前为www.mysite.co.uk/browse/....的所有旧网址重定向到www.mysite.co.uk/designs/....(设计文件夹替换浏览文件夹)

一个例子是:

http://www.mysite.co.uk/browse/home/kitchens

也需要去:

http://www.mysite.co.uk/designs/home/kitchens

重定向#2 - 现在第二次重定向导致问题。我需要重定向页面:

http://www.mysite.co.uk/designs

为:

http://www.mysite.co.uk/our-designs

所以我使用:

Redirect /designs http://www.mysite.co.uk/our-designs

这会将/designs页面正确地重定向到our-designs页面,但现在也会更改任何带有/designs/的网址,如上所示

http://www.mysite.co.uk/designs/home/kitchens

应该保持不变,但它会变为:

http://www.mysite.co.uk/our-designs/home/kitchens

这给了我一个找不到的页面

2 个答案:

答案 0 :(得分:1)

使用以下规则:

RewriteEngine on
RewriteRule ^browse/(.+)$ /designs/$1 [R=301,L]
RewriteRule ^designs/?$ /our-designs [R=301,L]

如果主机不同,您可以将http://www.mysite.co.uk作为主机重写URL。

答案 1 :(得分:0)

更改规则的顺序并添加查询参数以防止进一步重定向:

RewriteEngine On

RewriteCond %{QUERY_STRING} !^_noredir(&|$) [NC]
RewriteRule ^designs/(.*)$ /our-designs/$1 [R=301,L,NC,NE]

RewriteRule ^browse/(.*)$ /designs/$1?_noredir [R=301,L,NE,NC,QSA]