【问题标题】:If in htaccess for 301 Redirect special characters anywhere in URL to another characters?如果在 htaccess 中为 301 将 URL 中任何位置的特殊字符重定向到另一个字符?
【发布时间】:2016-05-15 23:00:06
【问题描述】:

规则:仅当+ 带有%252C+ 时,将所有包含%252C+ 的URL 重定向到,-,并将+ 重定向到-

例如: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/ (不应该重定向这个)

注意:请记住,您的代码不应仅适用于上述网址,而是适用于所有符合上述规则的网址。

【问题讨论】:

  • 这是一个奇怪的双编码网址...
  • 真的,朋友知道吗?

标签: apache .htaccess redirect url-redirection


【解决方案1】:

感谢 Sumurai8 提供您的解决方案,但需要修改如下代码:

RewriteEngine On

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

【讨论】:

  • 您可能只是提出了修改建议。我不确定你为什么在 C 后面包含一个额外的+。 OP的代码在url中只显示了一个C
【解决方案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] 标志来防止转义此类字符。

【讨论】:

  • 对不起我的朋友,我只能给你竖起大拇指,你的代码重定向到root /
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
相关资源
最近更新 更多