在进行301重定向时,如何避免apache将urlencoded chars转换为小写

时间:2013-06-06 08:39:45

标签: apache mod-rewrite redirect urlencode

当我尝试将所有内容从一个站点重定向到另一个站点时,我遇到了这个问题。我的http服务器是apache,我使用mod_rewrite来完成这项工作。 所以我将这些代码添加到httpd.conf:

RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^/(.*) http://www.example2.com/$1 [R=301,L]

在完成此操作后,Everthing似乎很好,但是当我访问一个urlencoded网址如http://www.example.com/?word=%E5%A4%A9时,apache会将我重定向到http://www.example2.com/?word=%e5%a4%a9,如您所见,所有urlencoded字符都被转换为小写这使得我无法通过搜索引擎来了解我的域名更改,因为搜索引擎要求新旧URI的完全匹配(区分大小写)。

BTW,当我在PHP中使用urlencode()函数时,返回的结果会自动大写,因此标准URL应该是这样的%E5%A4%A9。

我google了很多,什么都没有,所以我不得不来这里寻求帮助,任何帮助将不胜感激,提前谢谢。

1 个答案:

答案 0 :(得分:0)

不确定这是否有效,但请尝试

RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^/(.*) http://www.example2.com/$1?%{QUERY_STRING} [R=301,L]

RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^/(.*) http://www.example2.com/$1 [R=301,L,NE]