2014-05-09 50 views
1

以前的错误遗留了不好的链接,我试图用301 RedirectMatch清理我的混乱。RedirectMatch 301更改URL的一部分

正确的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 

(双反斜线//何时应该是单个/)

我修复了不良链接,但我仍然得到了外接链接和/或机器人抓取到那些不好的URL。

我想使用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

保持之前的内部重写那些重定向规则,并有另一个规则来照顾//

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] 
+0

谢谢,但没有完全奏效。如果我输入** www.example.com/aaa-directory // page **,它会将我带入一个相当古怪的url,如下所示:** http://www.example.com/home3/username/public_html/ example.com/aaa-directory/page**。那个奇怪的URL至少会将双反斜杠更改为单个......所以也许我们正在取得进展?还有什么建议? – user3597113

+1

立即尝试更新的代码。 – anubhava

+1

@anubhava与往常一样,您对Apache RewriteRule知识印象深刻。一个惊人的资产给社区! – JakeGould