1

我们正在使用一个简单的 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-usingandencode属性,但没有帮助。

4

2 回答 2

1

我有一个类似的问题。我所做的是将 decode 设置为 null :

<urlrewrite decode-using="null">
于 2017-01-08T10:04:29.413 回答
0

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

于 2013-01-30T11:40:23.667 回答