RedirectMatch 301更改URL的一部分

时间:2014-05-09 21:27:48

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

上一次错误遗留了不良链接,我试图用301 RedirectMatch清理我的混乱。

正确的URL格式如下:

http://www.example.com/aaa-directory/page
http://www.example.com/bbb-directory/page
http://www.example.com/ccc-directory/page

(等)

但是,之前有一些链接到以下网页的错误链接:

http://www.example.com/aaa-directory//page
http://www.example.com/bbb-directory//page 
http://www.example.com/ccc-directory//page

(双反斜杠//何时应为单/)

我已修复了错误的链接,但我仍然会收到外部链接和/或机器人抓取,这些链接会转到那些错误的网址。

我想使用RedirectMatch 301,以便任何带有文字的链接" -directory//"将重定向到与" -directory/"。

相同的链接

因此,http://www.example.com/ccc-directory//page将被重定向到: http://www.example.com/ccc-directory/page

我正在努力学习语法。任何帮助将不胜感激!

(不确定是否需要,但我目前的HTACCESS文件如下):

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

1 个答案:

答案 0 :(得分:1)

在内部重写规则之前保留重定向规则,并有另一条规则来处理//

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} \s/+(.*?)/+(/\S*) [NC]
RewriteRule ^ %1%2 [R=301,L,NE]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]