我们正在使用一个简单的 UrlRewriteFilter 规则来永久 (301) 将不带斜杠的 HTTP 请求重定向到带有斜杠的相同 URL 。
在某些情况下,我们的表示层需要带有编码特殊字符的 URL(例如 ö 的 %C3%B6),只要不涉及 UrlRewriteFilter 就可以正常工作。但是当规则生效时,我可以看到编码字符在重定向时格式错误,例如
www.mydomain.com/asdf%C3%B6asdf/
--> 301 -->www.mydomain.com/asdf%F6asdf/
%F6
不是有效的 unicode 序列(在 urldecode 时以黑色菱形结尾作为问号)。
我们在整个应用程序中使用 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
andencode
属性,但没有帮助。