日本語を含むURLのRewriteは.htaccessをBOMなしで保存する

  • 投稿
  • 編集

mod_rewriteで日本語を含むURLからのアクセスをリダイレクトしようと.htaccessに以下を記述しました。結局は以下の書き方で正しかったのですが、404エラーや500エラーが出て動きませんでした。いろいろなサイトを参考に試行錯誤するものの時間ばかり消費して心が折れそうになりました。

http://hoshiya.biz/ブログ/にアクセスがあったら、http://hoshiya.biz/blog/にリダイレクトする

Redirect permanent /ブログ/ http://hoshiya.biz/blog/
または
RewriteRule ^ブログ/$ /blog/ [R,L]

 

上記で正しく動くはずが動かなかったのは.htaccessをUTF-8の「BOMあり」で保存していたのが原因でした。BOMがどういうものかわかりませんが、「UTF-8(BOMあり)」で保存すると、例えURL内の文字や.htaccessの文字がちゃんとURLエンコードされていても転送元にエンコード文字や日本語があるとエラーになるようです。

UTF-8とUTF-8Nの違いによるワナ」を参考に「BOMなし」のUTF-8(UTF-8N)で保存したら、ちゃんとリダイレクトできました。メモ帳でできるかどうかわかりませんが、私の場合、テキストエディターのEmEditorで「BOMなし」保存しました。

 

ちなみに転送元の「ブログ」はUTF-8でダイレクト(URLエンコードなし)で書かないと動かないようです。

逆に、転送先に日本語が含まれている場合は、URLエンコードしていないとダメです。

http://hoshiya.biz/blog/にアクセスがあったら、http://hoshiya.biz/ブログ/にリダイレクトする

RewriteRule ^blog/$ /¥%e3¥%83¥%96¥%e3¥%83¥%ad¥%e3¥%82¥%b0/ [NE,R,L]

また、URLエンコードされた文字列の「%」の前に「\」を付けてエスケーブさせておくのと、「NE」を行末に入れておかないとURLエンコードの文字列のまま出力されたり、「%」なしの文字列が表示されたりします。