2012-12-05 84 views
0

在創建我們的汽車電子商務商店時,我們以名稱(「/」)命名了一些正斜槓/ Virgules產品,例如:VOLKSWAGEN GOLF/GTI。電子商務引擎將此產品的URL重寫爲GOLF%7B47%7DGTI。我們決定繼續前進,並將我們的所有產品重新命名爲使用世界「AND」,而不是正斜槓/ virgule。mod_rewrite編碼正斜槓困境

我們在網絡上有很多鏈接,我總是使用mod_rewrite來確保這些鏈接在我們更改產品的命名約定後仍然有效。然而,這一個讓我難倒了!這裏是我想要做的事:

OLD URL: http://mystore.com/products/MK4-GOLF%7B47%7DGTI-KONI-STRUTS.html 
NEW URL: http://mystore.com/products/MK4-GOLF-AND-GTI-KONI-STRUTS.html 

URL的「MK4」部分可以是任何的Mk1,Mk2的,MK3,的Mk4,MK5或MK6的,我們還提供各種支柱的每生成高爾夫/ GTI。因此,我需要編寫一個規則,用URL中的GOLF-AND-GTI代替Golf/GTI,並在目標字符串之前或之後執行任何操作。

我現在的(不正確)重寫規則是這樣的:

RewriteRule ^products/(.*)-GOLF%7B47%7DGTI-(.*) http://www.mystore.com/products/$1-GOLF-AND-GTI-$2 [B,R,L]

我已經出來拉我的頭髮在這最後幾個小時,只是似乎無法得到一個工作規則地點。任何援助將不勝感激!

非常感謝您的時間!

+0

嗨,約翰,不需要用「已解決」來標記你的問題:你接受下面的答案的事實,明確地表明未來的訪問者它解決了你的問題。乾杯。 –

回答

1

至於%7B47%7D解碼爲{47}你可以重寫URL如下:

RewriteRule ^products/(.*)-GOLF\{47\}GTI-(.*) http://www.mystore.com/products/$1-GOLF-AND-GTI-$2 [B,R=301,L] 

另外,作爲你的意圖是用新的來代替舊的URL,你應該使用301重定向,而不是默認的302 。這是從SEO角度處理永久URL更改的recommended way

+0

非常感謝!完美解決問題! +1並選擇正確答案! @Ketola 注意:由於URL的其餘部分包含' - '字符,這些字符沒有被編碼(例如products/MK1-GOLF-AND-GTI-KONI-STRUTS.html),我使用'NE'標誌而不是' B'爲RewriteRule。 –

+0

在這種情況下,使用NE而不是B應該是安全的,但是您可以完全忽略它,讓Apache根據需要轉義字符。同樣,因爲你的意圖可能是擺脫舊的URL,你應該使用R = 301作爲永久重定向。從SEO的角度來看,這是最佳選擇。 – Ketola

+0

非常感謝您輸入@Ketola,我修改了我的重定向以使用HTTP 301.我不知道這對搜索引擎優化是有益的,但這確實有很大的意義!再次感謝您的建議! –