2012/10/14
mod_rewrite+mod_jkによるTomcatの文字化け
環境が変わったら Tomcat が文字化けするようになったので
調査してくれと依頼されて調べた。
結論から言ってしまうと mod_rewrite と mod_jk
を併用した場合の問題だったのだが
整理された情報が無くてはまったのでまとめとく。
最新版の mod_jk はデフォルトの ForwardURIProxy でほぼ問題無いはずなのですが 日本語公式サイトの設定例に ForwardURICompat が指定されていたりするので コピペしちゃう人がいたりしそうです。
- 発生条件:
-
URLパラメータに日本語を使っていて mod_rewrite と mod_jk
を経由して Tomcat にリクエストを渡す場合、文字化けが発生する。
- 原因:
-
mod_jk の設定に以下の設定が有る場合、
mod_rewriteが日本語をデコードしてしまうので文字化けする。
JkOptions +ForwardURICompat
- 解決方法:
-
mod_jk の設定を以下に変更する。但し、mod_jk-1.2.24 以降が必要。
JkOptions +ForwardURIProxy
- 問題の本質:
-
- mod_rewrite と Tomcat がどちらもURL内のエスケープ文字(%xx) を自前で解析したいため矛盾が発生する。
- mod_jkがどちらを優先するかのデフォルトの設定を2転3転させているため 混乱に拍車がかかっている。 バージョンとデフォルト動作の整理。
mod_jk Ver. デフォルト設定 動作 〜1.2.22 ForwardURICompat mod_jkに渡すURLはmod_rewriteを通す。
%xxはデコードされる。1.2.23 ForwardURICompatUnparsed mod_jkに渡すURLはmod_rewriteを通さない。
%xxはデコードされない。1.2.24〜 ForwardURIProxy mod_jkに渡すURLはmod_rewriteを通す。
mod_rewriteが操作した所以外は%xxはデコードされない。
最新版の mod_jk はデフォルトの ForwardURIProxy でほぼ問題無いはずなのですが 日本語公式サイトの設定例に ForwardURICompat が指定されていたりするので コピペしちゃう人がいたりしそうです。
- 内容が古い:http://www.jajakarta.org/tomcat/tomcat-jk2/ja/docs/jk/aphowto.html
- http://tomcat.apache.org/connectors-doc/reference/apache.html
- http://d.hatena.ne.jp/kusakari/20070616/1181971048
- http://d.hatena.ne.jp/kusakari/20080325/1206417188
この投稿へのコメント
コメント・フォーム