Apache mod rewrite删除www并将%2520转换为空格

Apache mod rewrite删除www并将%2520转换为空格,apache,mod-rewrite,Apache,Mod Rewrite,将www重定向到non正常工作,但将所有出现的%2520都转到一个空格,使用QUERY_字符串,在合并它们时似乎失败了。 我在谷歌上搜索并搜索了大量的RewriteCond和RewriteRule的组合,但我找不到一个与此类似的例子。我所知道的是我可能滥用了(.*)正则表达式。总正则表达式和mod_重写noob在这里-没有讽刺评论请:-)提前感谢 我试过这个,反之亦然: RewriteCond %(HTTP_HOST) ^www.mywebsite\.com$ RewriteRule (.*)

将www重定向到non正常工作,但将所有出现的%2520都转到一个空格,使用QUERY_字符串,在合并它们时似乎失败了。 我在谷歌上搜索并搜索了大量的RewriteCond和RewriteRule的组合,但我找不到一个与此类似的例子。我所知道的是我可能滥用了(.*)正则表达式。总正则表达式和mod_重写noob在这里-没有讽刺评论请:-)提前感谢

我试过这个,反之亦然:

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]

url允许的字符子集有限。不允许将空格作为url中的字符,因此将其编码为
%20
。类似地,
%2520
是双编码空间

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


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

url允许的字符子集有限。不允许将空格作为url中的字符,因此将其编码为
%20
。类似地,
%2520
是双编码空间

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

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

不幸的是:重写规则^(+$$1?%1(%20)%3[N,R=301]仍然不起作用,因为我的规则无法组合。它忽略了四个语句中的最后两个。总之,我从一个工作示例中得到了最后两条规则。有人知道如何使前两个和后两个一起工作吗?不幸的是:RewriteRule^(+)$$1?%1(%20)%3[N,R=301]仍然不起作用,因为我的规则无法组合。它忽略了四个语句中的最后两个。总之,我从一个工作示例中得到了最后两条规则。有人知道如何使前两个和后两个一起工作吗?