2016-11-22 21 views
1

我需要幫助爲.httaccess文件夾中的以下鏈接結構創建重寫規則/ 301重定向。301重定向重寫規則以連字符替換下劃線並刪除子目錄

來源網址:www.example.com/sub_directory/product_name_1.html

目標網址:www.example.com/prodcut-name-1.html

對重定向的要求則是爲如下:

  • 刪除/ sub_directory/
  • 改變所有下劃線 '_',以連字符 ' - '

不幸的是我的正則表達式不是很好。我試着四處搜尋,但其他職位的解決方案與類似的問題,其中不爲我工作(如here

任何幫助解決方案,將不勝感激。另外如果你可以請解釋爲什麼/如何。我希望能夠更好地理解這一點。

+0

你已經在'sub_directory/.htaccess'一些代碼:

您可以在頂部站點根的.htaccess的使用這些規則? – anubhava

+0

這是針對根目錄中的.htaccess。該網站被轉移到一個新的平臺,該目錄不再存在。頁面結構如上所述發生了變化。我只是將所有轉到該子目錄的鏈接重定向到主要產品頁面。 –

回答

0

Answer from @Walf已接近,但需要進行一些更改,例如正則表達式錨和DPI標誌。

RewriteEngine On 

# remove /sub_directory/ when there is no _ left 
RewriteRule ^sub_directory/([^_]+)$ /$1 [R=301,NC,NE,L] 

# use recursion based rule to replace _ by - 
RewriteRule ^(sub_directory/[^_]*)_+(.*)$ $1-$2 [NC,N,DPI] 

# rest of your rules go here 
+1

這工作完美!謝謝 –

+0

不客氣。沒有想過評論/改進我的答案? – Walf

+0

@Walf,我試過你的答案,但無法使它工作。然而,我很抱歉,我應該給你信用的正則表達式和整個方法(現在upvtoted) – anubhava

1

像這樣的事情

RewriteEngine on 
RewriteBase/
RewriteRule ^(sub_directory/[^_]*)_+(.*) $1-$2 [DPI,N] 
RewriteRule ^sub_directory(?:$|/(.*)) http://%{HTTP_HOST}/$1 [R=301,L] 

它首先遍歷網址是該子目錄中,有一個連字符來代替連續的下劃線。它首先完成,因此它不會干擾可能包含下劃線的其他URL。然後,它將該子目錄的(已清理的)請求從外部重定向到根目錄。醜陋的分組確保它僅適用於該文件夾。

+0

謝謝你的幫助。不幸的是,這沒有奏效。網址保持不變。試圖將所有下劃線改爲連字符也沒有效果。也許我們現有的另一個規則是干涉。 我們只是將所有請求重定向到這個子域到主要產品頁面。再次感謝你。 –