我是新手,我正在尝试为以下页面找出正确的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文件中较新的缩短版本?非常感谢你的时间和考虑!
答案 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/。