如何301页面“向上”重定向页面

时间:2012-07-09 15:16:53

标签: .htaccess redirect http-status-code-301

我是新手,我正在尝试为以下页面找出正确的301重定向。我希望我在这里明白:)在我的.htaccess文件中,我想将页面“向上”重定向一页,而不必单独完成每一页。

我的原始页面如下所示:

www.doctors.com/skin/california/best-skin-doctors-california/
www.doctors.com/skin/california/best-skin-doctors-california/?page=1
www.doctors.com/skin/california/best-skin-doctors-california/?page=2

....等。 ....喜欢/?page = 33

以及更多类别和州,例如:

 www.doctors.com/heart/new-york/best-heart-doctors-new-york/
 www.doctors.com/heart/new-york/best-heart-doctors-new-york/?page=1
 www.doctors.com/heart/new-york/best-heart-doctors-new-york/?page=2

...等。 .....再次喜欢/?page = 24

我已经改变了页面结构以消除长URL ...像这样:

www.doctors.com/skin/california/
www.doctors.com/skin/california/?page=1
www.doctors.com/skin/california/?page=2

等.....同样......

 www.doctors.com/heart/new-york/
 www.doctors.com/heart/new-york/?page=1
 www.doctors.com/heart/new-york/?page=2

如何“批量”将带有长网址的原始网页重定向到我的.htaccess文件中较新的缩短版本?非常感谢你的时间和考虑!

1 个答案:

答案 0 :(得分:1)

使用mod_alias,您只需将其添加到文档根目录中的.htaccess文件中:

RedirectMatch 301 ^/([a-z\-]+)/([a-z\-]+)/[a-z\-]+/$ /$1/$2/

但是如果您需要进一步限制重定向的工作方式,可以使用Apache's mod_rewrite模块。看一下RewriteCond指令,你可以对规则施加条件并将所有内容放在.htaccess中。主要规则看起来非常类似于mod_alias' RedirectMatch。例如:

RewriteRule ^([a-z\-]+)/([a-z\-]+)/[a-z\-]+/$ /$1/$2/ [R=301,L]

在这两种情况下,查询字符串(页面= 3部分)都只是附加到新目标。查看different things you can do with RewriteCond,说明您是否要在/images//themes/之类的请求中排除此规则:

RewriteCond %{REQUEST_URI} !^/images/
RewriteCond %{REQUEST_URI} !^/themes/
RewriteRule ^([a-z\-]+)/([a-z\-]+)/[a-z\-]+/$ /$1/$2/ [R=301,L]

因此,如果请求不以/images/ 开头,请求不会以/themes/开头,则应用该规则。这个示例会使http://host.com/themes/subSilver/magic-icons/的请求无法重定向到http://host.com/themes/subSilver/