【.htaccess】日本語あれこれで301リダイレクトに失敗する場合の対処法
URLを変更した場合、通常「.htaccess」ファイルを利用して301リダイレクトをかけますが、URLに日本語が含まれている(いた)場合、「.htaccess」の記述方法によっては301リダイレクトがうまく機能しない場合があります。
ここでは私の失敗を含めて対処法をまとめておきたいと思います。
「日本語が含まれているURL」を「半角英数字のみのURL」に変更
これまでWordPressで運営しているサイトのURLを「URLに日本語が含まれているとSEO的に有利かも?」という理由で次のようにしていました。
http://hogepiyo.jp/○○○(記事名).html
しかし最近ではSEO効果も薄れていますし、URLに日本語が含まれていると何かと不便なので半角英数字のみのURLに変更しました。
【例】
http://hogepiyo.jp/日本語.html
↓
http://hogepiyo.jp/japanese.html
そこで元URLから新URLに向けて「.htaccess」を利用して次のように301リダイレクトをかけたのですが、うまく機能しませんでした。
Redirect 301 /%E6%97%A5%E6%9C%AC%E8%AA%9E.html http://hogepiyo.jp/japanese.html
「あれおかしいな?」と思い、いろいろなパターンで試したのですが、次のようにすれば301リダイレクトができることがわかりました。
Redirect 301 /日本語.html http://hogepiyo.jp/japanese.html
最初は「.htaccessファイルに日本語(マルチバイト)文字を書いたらダメだろ」と思い、わざわざ日本語文字をURLエンコードして記述したのですが、その必要はありませんでした。
「日本語が含まれているURL」を別の「日本語が含まれているURL」に変更
ここからは次いでと言ってはなんですが、日本語が含まれているURLの301リダイレクトの方法をまとめておきたいと思います。
【例】
http://hogepiyo.jp/日本語.html
↓
http://hogepiyo.jp/日本の言葉.html
このようにURLを変更した場合、次のように.htaccessに記述します。
Redirect 301 /日本語.html http://hogepiyo.jp/%E6%97%A5%E6%9C%AC%E3%81%AE%E8%A8%80%E8%91%89.html
つまり、リダイレクト前のURLはエンコードせず、リダイレクト後のURLはエンコードします。
「半角英数字のみのURL」を「日本語が含まれているURL」に変更
上2つのパターンで対処法は予想できますが、
【例】
http://hogepiyo.jp/japanese.html
↓
http://hogepiyo.jp/日本語.html
の場合、次のようにします。
Redirect 301 /japanese.html http://hogepiyo.jp/%E6%97%A5%E6%9C%AC%E8%AA%9E.html
まとめ
- リダイレクト前のURL(日本語)はエンコードしない
- リダイレクト後のURL(日本語)はエンコードする
これまでサーバ設定ファイル「.htaccess」には日本語の文字は書けないと思ってましたが、書けるんですね。これは完全に盲点でした。
なお、URLエンコードにはツール「日本語を含むURLを変換(URLエンコード)」を使ってみてください。
【追記】
別のサーバ設定ファイル「.htaccess」に上記方法で301リダイレクトをかけたのですが、うまくいきませんでした。
いろいろ試行錯誤した結果、「.htaccess」の文字コードを「UTF-8」にしたら301リダイレクトができました。
そのため「.htaccess」の文字コードは「UTF-8」にするようにしてください。
あわせて読んでほしい!
コメント
まだコメントはありません。