2016-05-15 14 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

相关问题