如果在htaccess 301中将URL中任意位置的特殊字符重定向到另一个字符?
规则:仅当+
附带%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/
(不应该重定向这个)
注意:请注意,您的代码不应只用于上述网址,还应包含所有使用上述规则的网址。
感谢Sumurai8,您的解决方案,但它需要修改这样的代码:
RewriteEngine On
RewriteRule ^([^+]+)\+(.+)%2C+\+(.*)$ /$1-$2,-$3 [R,L]
RewriteRule ^([^+]+)%2C+\+(.*)$ /$1,-$2 [R,L]
你可能只是建议编辑。我不确定为什么你在C后加入了一个额外的'+'。 OP的代码只在url中显示一个“C”。 – Sumurai8
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]
标志来防止转义这些字符。
对不起我的朋友,我只能给你竖起大拇指,你的代码重定向到根/ – Smith
这是一个奇怪的双编码的网址... – Sumurai8
诚然,任何想法,我的朋友? – Smith