1

我是新手,我正在尝试为以下页面找出正确的 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

....ETC。....最多喜欢 /?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

...ETC。.....再次喜欢 /?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

等等

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

4

1 回答 1

1

使用 mod_alias,您可以简单地将其添加到文档根目录的 .htaccess 文件中:

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

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

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

在这两种情况下,查询字符串(page=3 部分)只是简单地附加到新目标。查看您可以做的不同事情RewriteCond/images/,比如当您请求类似or时,如果您想排除此规则/themes/

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

So, if the request doesn't start with /images/ and the request doesn't start with /themes/, then apply the rule. This example would make it so a request for http://host.com/themes/subSilver/magic-icons/ don't get redirected to http://host.com/themes/subSilver/.

于 2012-07-09T16:26:58.120 回答