2012-07-09 170 views
1

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

我原来的页面看起来像下面这样:

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 

....等。 ?....高达喜欢/页= 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 

...等。 .....再升喜欢/页= 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 

我怎么能“批量”重定向与长的URL到新,缩短的版本在我的.htaccess文件中的原始页面?非常感谢您的时间和考虑!

回答

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] 

在这两种情况下,查询字符串(page = 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/

+0

第一个似乎很好。非常感谢Jon! – loren321 2012-07-09 17:09:57