2016-05-15 56 views
1

規則:僅當+附帶%252C+時,將所有包含%252C+的URL重定向到,-,並將+重定向到-如果在htaccess 301中將URL中任意位置的特殊字符重定向到另一個字符?

e.g1:http://www.example.com/FortWorth%252C+TX/ 到:http://www.example.com/FortWorth,-TX/

e.g2:http://www.example.com/Fort+Worth%252C+TX/ 到:http://www.example.com/Fort-Worth,-TX/

e.g3:http://www.example.com/Fort+Worth/ 到:http://www.example.com/Fort+Worth/ (不應該重定向這個)

注意:請注意,您的代碼不應只用於上述網址,還應包含所有使用上述規則的網址。

+1

這是一個奇怪的雙編碼的網址... – Sumurai8

+0

誠然,任何想法,我的朋友? – Smith

回答

2

感謝Sumurai8,您的解決方案,但它需要修改這樣的代碼:

RewriteEngine On 

RewriteRule ^([^+]+)\+(.+)%2C+\+(.*)$ /$1-$2,-$3 [R,L] 
RewriteRule ^([^+]+)%2C+\+(.*)$ /$1,-$2 [R,L] 
+0

你可能只是建議編輯。我不確定爲什麼你在C後加入了一個額外的'+'。 OP的代碼只在url中顯示一個「C」。 – Sumurai8

2

RewriteRule的第一個參數與%-decoded url匹配,所以它應該與http://www.example.com/FortWorth%2C+TX/匹配,而不是http://www.example.com/FortWorth%252C+TX/

假設奇怪的子串只出現一次,而「+」只出現一次,你可以用下面兩條規則來做。如果出現多個+,事情會很快變得難看,因爲您需要添加更多的規則,或者開始遞歸處理它。

RewriteRule ^([^+]+)\+(.+)%2C\+(.*)$ $1-$2,-$3 [R,L] 
RewriteRule ^([^+]+)%2C\+(.*)$ $1,-$2 [R,L] 

我不知道,如果mod_rewrite的將難逃,字符作爲「特殊字符」。這是一個在url中使用的有效字符。如果它給您帶來問題,您可以使用[NE]標誌來防止轉義這些字符。

+0

對不起我的朋友,我只能給你豎起大拇指,你的代碼重定向到根/ – Smith

相關問題