我们使用简单的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-using
和encode
属性,但没有帮助。
答案 0 :(得分:1)
我有类似的问题。我做的是将解码设置为null:
<urlrewrite decode-using="null">
答案 1 :(得分:0)
我在下面描述的问题似乎与此bug report有关,该问题已于2010年提交,此后一直未受影响。我可能不得不通过使用Java“手动”处理请求来解决这个问题。不过,其他想法仍然受欢迎。