【.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」にするようにしてください

 

あわせて読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント