着急:urlrewrite+IIS下映射中文目录名乱码,求解!
先说说我的运行环境:urlrewrite-2.6.0.jar,TOMCAT 5.0.X, JDK 1.4.X,win2000下使用IIS
整合技术将80端口配置到我的域名www.abc.com上。
WEB-INF中通过FILTER控制编码为UTF-8.
我希望将如下的访问:
http://www.abc.com/search/search.jsp?keys=%E6%9E%97%E4%BF%8A%E6%9D%B0
(keys是中文,直接访问没有问题)
映射成http://www.abc.com/search/keys/%E6%9E%97%E4%BF%8A%E6%9D%B0
(问题出现了,得不到正确结果,问号出现)
现象是:8081端口下,也就是不通过IIS ISAPI 是完全没有问题的。
但是80端口就出现乱码。无法得到正常的查询结果,明显的keys变成了问号。
求解? 貌似同时做过IIS+urlrewrite+中文 的人不多,因为我网上查询的所有文章都没有提到过
中文或者编码的问题。
urlrewrite.xml配置如下:
<?xml version= "1.0 " encoding= "utf-8 "?>
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN "
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd ">
<urlrewrite>
<rule>
<from> /search/keys/(.*)$ </from>
<to type= "forward "> /search/search.jsp?keys=$1 </to>
</rule>
</urlrewrite>
TOMCAT的server.xml代码片段:
<Connector port= "8081 "
maxThreads= "150 " minSpareThreads= "25 " maxSpareThreads= "75 "
enableLookups= "false " redirectPort= "8443 " acceptCount= "100 "
debug= "0 " connectionTimeout= "20000 "
disableUploadTimeout= "true " useBodyEncodingForURI= "true "
URIEncoding= "UTF-8 "/>
<Connector port= "8009 "
enableLookups= "false " redirectPort= "443 " debug= "0 "
protocol= "AJP/1.3 " useBodyEncodingForURI= "true " URIEncoding= "UTF-8 "/>
以上配置可以保证在8081下mneiyou任何问题。
但是AJP/1.3的8009下面我也配置useBodyEncodingForURI= "true " URIEncoding= "UTF-8 " 了。
此外,还有个奇怪的现象:
我尝试j将 <to type= "forward "> /search/search.jsp?keys=$1 </to>
修改成 <to type= "redirect "> /search/search.jsp?keys=$1 </to> 重定向的模式。
非常奇怪的现象出现了。当汉字是奇数时结果错误,偶数汉字时 正常。
控制台打印 取得的keys 汉字变成“周杰?”
------解决方案--------------------先转化成utf-8,然后再转化成gb2312