1

将 www 重定向到 non 工作正常,但是当我将所有出现的 %2520 转换为空格时,使用 QUERY_STRING 似乎失败了。我已经在 Google 上搜索并搜索了很多组合 RewriteCond 和 RewriteRule 的内容,但我找不到一个看起来与这个工作原理相近的示例。我所做的只是我可能在滥用 (.*) 正则表达式。正则表达式和 mod_rewrite 新手在这里 - 请不要讽刺评论 :-) 在此先感谢!

我试过这个,反之亦然:

RewriteCond %(HTTP_HOST) ^www.mywebsite\.com$
RewriteRule (.*) http://mywebsite.com/$1 [R=301,L]
RewriteCond %{QUERY_STRING} ^(.*)(%2520)(.*)$
RewriteRule ^(.+)$ $1?%1\ %3 [N,R=301]
4

1 回答 1

1

url 允许的字符子集是有限的。空格不允许作为 url 中的字符,因此它们被编码为%20. 同样,%2520是双编码空间。

您提供的规则对我来说很好(您可以省略捕获组,%2520因为它是不必要的,但它不会破坏任何东西)。它将转变http://example.com/minimalonecharacter?asdf%2520qwerhttp://example.com/minimalonecharacter?asdf%20qwer.

我注意到您为此使用了状态代码301(永久重定向)。我建议不要使用永久重定向进行测试,直到一切都按您希望的那样工作。浏览器可能会缓存永久重定向,跳过对服务器的请求。如果您进行了错误的重写,此结果将被缓存,并且未来的尝试“奇怪地”指向您的第一次尝试。

于 2013-08-02T16:16:38.153 回答