关于tuckey的一个小问题

tuckey urlrewrite 是一个非常不错的工具,可以让我们很轻松的优化url。不过最近在使用中遇到了一个小问题,在这记录一下。

如果一个url中包含非英文的字符,例如中文,那么我们通常的做法是将中文进行 urlencode。例如这么一个 url: http://xxx.com/t/%2e%4e%5e (字符是我乱编的,就是打个比方)。其中的中文就是 encode 后的字符。

之后,我们还需要修改tomcat的配置,也就是设置 URLEncoding = "UTF-8",不然tomcat会用 ISO-8859-1 来处理你的url。

可是,经过 tuckey 处理之后,后台得到的字符就是乱码。如果不使用 tuckey ,那么就能得到正确的中文。

所以,可以排除 tomcat, struts 的问题,问题一定处在 tuckey 上。

查阅了 tuckey 的文档,还有 google group ,终于找到了答案。

首先, tuckey 默认会 decode 你的 url,虽然使用utf-8去decode,但是我还是很反感这样的功能。你 tuckey 就负责 urlrewrite 就好了,encode/decode url 这样的工作本来不是你的职责,你搞这些干什么?工作不专一呀!

去掉默认的 decode url 功能可以使用 decode-using="null" 来设置,这个在官方帮助里有。

设置了 decode-using="null" 以后,我们传过去的 %2e%4e%5e 之类的字符就不会被转化了,可是为什么后台还是得到乱码呢?

在 google group 上搜了半天,终于找到了这个:
http://groups.google.com/group/urlrewrite/browse_thread/thread/da8a1e27dbdcc03/b30b72f12c91d729?lnk=gst&q=%25+in+the+url#b30b72f12c91d729

所以,最后这个 rule 应该这么写:

<from>^test/(.*)$</from>
<to>/test.do?id= ${escape:$1}</to>

至于为什么要 escape 一下?没搞明白,我使用了 <from decode="false"> 也不好使。感觉还是 tuckey 本身的问题。

所以说,一个工具,应该关注于本身的功能,不应该牵扯额外过多的东西,象 url encode/decode 这样的功能,我觉得是不应该加在 tuckey urlrewrite 这样的工具里的。

你可能感兴趣的:(thread,tomcat,工作,struts,Google)