ApacheのRewriteRuleで遷移先に日本語文字列を含むURLを指定する

さんざんはまったのでメモ。
例えば、/hogehttp://hoge.comに飛ばしたい場合は、

RewriteRule ^/hoge http://hoge.com [NE,R=301,L]

とかすると思うんですよ。
ここで、http://ほげ.comに飛ばしたい場合はどうするか。
まあ普通に考えてURLエスケープしますよね。パーセントを使うわけです。

RewriteRule ^/hoge http://%E3%81%BB%E3%81%92.com [NE,R=301,L]

これで完璧だと思ったら、どうも世の中うまくいかない。
実際にこれを動かすと、何故か

http://%E31%BB%E312.com

に飛ばされる。
なにゆえ!!!


結論から言うと、RewriteCondを使う場合に、パーセントはRewriteCondの正規表現で()指定した部分を%[数字]で置き換える指令になっちゃうんです。
なので、%[数字]の部分は全てエスケープしなければいけません。
エスケープ文字は\です。
つまり正しくは

RewriteRule ^/hoge http://%E3\%81%BB%E3\%81\%92.com [NE,R=301,L]

とするべきです。
ここで間違って%E3とかまで\%E3とやってしまうとまたおかしな事になるので注意が必要です。


"RewriteRule パーセント"でぐぐっても全くヒットしなかったので、ここにしたためるものである。