単純な UrlRewriteFilter ルールを使用して、HTTP 要求を永続的に (301) リダイレクトし、末尾にスラッシュを付けずに、末尾にスラッシュを付けた同じ URL にリダイレクトします。
場合によっては、プレゼンテーション レイヤーにエンコードされた特殊文字 (ö の場合は %C3%B6 など) を含む URL が必要ですが、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
との属性を試してみましたが、encode
役に立ちませんでした。