.htaccessでページ単位、ディレクトリ単位の301リダイレクト(転送)を設定する方法

.htaccess

WEBサイトをリニューアルする際に、ページ名やディレクトリー名が変更になることはよくありますよね。そういった場合、「検索エンジンに認知されている、あるいは被リンクを受けている旧アドレスにアクセスがあったときは、リニューアル後の新しいアドレスでページが表示されるように設定してほしい」といった要望が当然あると思います。
検索エンジンのインデックスに登録されているページや、被リンクを受けているページがリンク切れになってしまうと、それだけで訪問の機会を損失することになってしまいます。今回は、こういった機会損失を回避するための、.htaccessファイルを使った正しいリダイレクトの設定方法をご紹介します。

.htaccessについて

.htaccessとは、WEBサーバーをコントロールするための設定が記述されたファイルのことです。これを、サーバー上に配置することで、.htaccessに記述された設定内容が配置されたディレクトリ内はもちろん下層のディレクトリに対しても適用されます。

リダイレクトの設定を行うときは通常WEBサイトの第一階層(トップページのindexが配置されているディレクトリ内)に.htaccessを配置します。.htaccessが既に配置済みのWEBサイトの場合はFTPソフトなどで.htaccessを一度ダウンロードして、それを編集します。
.htaccessはテキストエディターで編集することができます。

もし、.htaccessがWEBサーバー上に配置されていない場合はテキストエディターで作成します。はじめは、htaccess.txtという名前で作成しておいて編集完了後に.htaccessに書き換えれば完成です。PCの環境で.htaccessに書き換えできない場合はhtaccess.txt をFTPソフトなどでアップロード後に.htaccessに書き換えるとうまくいきます。

ページ単位あるいはディレクトリー単位の301リダイレクト記述方法

ページ単位あるいはディレクトリー単位でリダイレクトさせたい場合は301リダイレクトを設定します。
301リダイレクトとは、恒久的なリダイレクトでURLが元のアドレスに再び変更されることがないとサーバーに伝える役割をします。旧ページへのアクセスを自動で新ページへアクセスさせる今回のようなケースで301リダイレクトは有効な設定になります。

それでは早速記述方法をみてみましょう。

301リダイレクト記述の基本

RewriteEngine OnはURLを正規表現で書き換える機能を有効にするための記述です。最初にこれを記述しておくことで、URLのリダイレクト設定が有効になります。最初に一度記述すればその後記述する必要はないです。

RewriteRule … の部分が301リダイレクトに関する具体的な記述部分になります。
「リダイレクトの宣言(RewriteRule)」「^旧URL$」「新URL(絶対パス)」「301宣言([R=301,L])」
の順で記述します。

「^旧URL$」部分で「^」の後、あるいは「$」の前にスペースがあるとエラーになってしまいます。設定する旧要素との間にスペースが入らないように注意してください。

ディレクトリ名の変更、ページ→ディレクトリの変更

http://example/old-dir/からhttp://example/new-dir/のようにディレクトリ名を変更することも可能です。また静的サイトからwordpressで構築してリニューアルする際などにありがちな、http://example/old-dir/index.htmlからhttp://example/new-dir/に書き換えるといった設定もできます。

.htaccess内で行頭に#を記述するとコメントアウトすることができます。

ディレクトリ名もページ名も変わる場合

例)http://example/old-dir/old-page.html → http://example/new-dir/new-page.html

ディレクトリ名もページ名も変わるときは、先にディレクトリ名を変更しておいて、新しいディレクトリ内の旧ページ名を新ページ名に変換するという手順で設定します。
先にディレクトリ名を変更した場合、
RewriteRule ^old -dir/old-page.html$ new-dir/ new-page.html [R=301,L]
のようにold -dirで指定できないので注意が必要です。