导致Tuckey的UrlRewriteFilter导致urlencoded unicode字符变形的原因(例如³%C3%B6)以及如何避免它?

时间:2013-01-29 16:41:58

标签: unicode url-rewriting special-characters urlencode tuckey-urlrewrite-filter

我们使用简单的UrlRewriteFilter规则永久(301)将HTTP请求没有尾部斜杠重定向到相同的网址 尾部斜杠。

在某些情况下,我们的表示层需要带有编码特殊字符的网址(例如,³%C3%B6),只要不涉及UrlRewriteFilter就可以正常工作。但是当规则开始时,我可以看到编码字符在重定向时变得格式不正确,例如

www.mydomain.com/asdf%C3%B6asdf/ - > 301 - > www.mydomain.com/asdf%F6asdf/

%F6不是有效的unicode序列(在urldecoded时以黑色菱形中的问号结尾)。

我们在整个应用程序中使用UTF-8,它在响应标头和HTML的<head>部分中设置。格式错误的编码发生在Windows和Linux计算机上。重写规则如下所示

<rule enabled="true" match-type="regex" >
    <name>Force trailing slash</name>
    <note>...</note>
    <condition type="request-uri" operator="notequal">...>/condition> <!-- some URLs shall not be redirected -->
    <from>(^[^\?]*)(\?.*)?$</from>
    <to type="permanent-redirect" last="true" >$1/$2</to> <!-- adding trailing slash and query string, if present -->
</rule>

我很高兴有任何想法如何解决这个问题。我玩过decode-usingencode属性,但没有帮助。

2 个答案:

答案 0 :(得分:1)

我有类似的问题。我做的是将解码设置为null:

<urlrewrite decode-using="null">

答案 1 :(得分:0)

我在下面描述的问题似乎与此bug report有关,该问题已于2010年提交,此后一直未受影响。我可能不得不通过使用Java“手动”处理请求来解决这个问题。不过,其他想法仍然受欢迎。