2014-05-09 54 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