Apacheのmod_rewriteで日本語にマッチさせたい
仕事の中で日本語URLをmod_rewriteで別のディレクトリにアクセスさせる場合にひっかかった部分なんですが、役に立つかもしれないのでシェアします。
Apacheで日本語URLが認識できない
Apacheでは基本的に日本語URLの部分をそのまま認識することはできません。
その代わりにURLエンコードされます。 これはJavaScriptのencodeURI()等でご存知かもしれませんね。
ところがApacheにはもうひと癖あって、次のような特徴があります。
- 「%(パーセント)」部分が「x」に変換される。
- エンコード文字の大文字の部分が小文字に変換される。
ためしにアクセスログやエラー・ログが見られる方は見てみると良いでしょう。
よくWEBサーバ攻撃用のコードにも2バイトコードが埋め込まれている場合に以下のようなログが記録されることがあるので、目にした人も多いのではないでしょうか。
Thu Aug 30 14:21:03 2012] [error] [client XXX.XXX.XXX.XXX] File does not exist: /var/www/httpdocs/xe4xbexa1xe6xa0xbc...
Apache設定用のURLエンコード変換器を作った
というわけで、いちいち変換の文字列を作るのが大変なので、JavaScriptで簡単に変換できるコンバーターを作ってみました。 良かったらお使いくださいませ。
変換したい文字列 | |
---|---|
変換後の文字列 | ここに変換後のテキストが表示されます。 |
通常の英単語をスルーする処理に意外と苦労しました(^-^;
変換例
これで例えば「http://www.example.com/ほげ/」というURLを「http://www.example.com/hoge/」というURLでアクセスさせたい場合は「.htaccess」ファイル等に以下のように記述します。
RewriteEngine On RewriteBase / RewriteRule ^\xe3\x81\xbb\xe3\x81\x92/$ /hoge/ [L]
2012-08-30