规则:仅当%252C+
附带,-
时,将包含+
的所有网址重定向至-
并将+
重定向至%252C+
。
例如:http://www.example.com/FortWorth%252C+TX/
致:http://www.example.com/FortWorth,-TX/
例如:http://www.example.com/Fort+Worth%252C+TX/
致:http://www.example.com/Fort-Worth,-TX/
例如:http://www.example.com/Fort+Worth/
致:http://www.example.com/Fort+Worth/
(不应该重定向这个)
注意:请记住,您的代码不应只针对上述网址,而应针对具有上述规则的所有网址。
答案 0 :(得分:1)
RewriteRule
的第一个参数与%-decoded网址匹配,因此应与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]
标志来防止转义此类字符。
答案 1 :(得分:1)
感谢Sumurai8,为您的解决方案,但它需要像这段代码一样进行修改:
RewriteEngine On
RewriteRule ^([^+]+)\+(.+)%2C+\+(.*)$ /$1-$2,-$3 [R,L]
RewriteRule ^([^+]+)%2C+\+(.*)$ /$1,-$2 [R,L]