【.htaccess】Redirect ディレクティブ

URLやドメインが変わって、旧 URL から新 URL への自動遷移に利用します。
リダイレクトは、Redirect ディレクティブ、mod_rewrite モジュールどちらでもできますが、2つの違いはこちらです。

Redirect ディレクティブ: 旧 URL から新 URL へシンプルなリダイレクトのみ。サーバのコア機能を利用するので、大概の場合利用できます。
mod_rewrite モジュール: リダイレクトの細かな設定が出来ます。サーバの拡張機能を利用するので、サーバによっては利用できないこともあります。(とは言っても、ほとんどは利用できると思いますが)

今回は、Redirect ディレクティブについてまとめます。

Redirect の基本構文

Redirect ディレクティブで、URL を自動転送する基本的な構文です。

Redirect [status] URL-path URL

左から一つずつ見ていきましょう。

  • Redirect
  • 旧 URL から新 URL へリダイレクトの宣言です。

  • [status]
  • 後述しますが、このオプションを指定することで、このリダイレクトが恒久的なものなのか、一時的なものなのか、など、HTTP ステイタスコードを返すことができます。指定がないと、デフォルトの “temp” となります。

  • URL-path
  • 転送元の URL パスを指定します。http: などで始まる絶対 URL ではなくて、/ で始まるルートパスです。.htaccess ファイルを置くディレクトリが、トップディレクトリとなります。

  • URL
  • 転送先の URL を指定します。http: などで始まる絶対 URL を指定します。

Redirect ディレクティブの status 引数一覧です。

説明
permanent 恒久的な移動の場合指定。HTTP ステータス:301
temp 一時的な移動の場合指定。HTTP ステータス:302
seeother 他のもので置き換えられた場合指定。HTTP ステータス:303
gone 恒久的に削除された場合指定。HTTP ステータス:410

Redirect 設定例

“blue.com” という旧ドメインから、”green.com” という新ドメインへ、サイトを恒久的に引越ししたとします。

恒久的な移動なので、[statas] は、”permanet” を指定します。
こうすることで、検索エンジンに、旧サイトの評価が、新サイトへと受け継がれるので、恒久的な引越しである場合、SEO 的にも重要です。

blue.com/ 以下のファイルは、それぞれ green.com/ 以下の対応するファイルへ転送されます。
blue.com/index.html ⇒ green.com/index.html
blue.com/example01.html ⇒ green.com/example01.html

しかしながら、blue.com/example02.html を転送しようとすると、green.com/ 以下には example02.html という対応するファイルがありません。この場合は、エラー(Error 404)となります。

このようなエラーに対応するために、ErrorDocument ディレクティブで、動作指定をするのですが、後日まとめます。

<サイト全体転送>
構文はこのようになります。

Redirect permanent / http://green.com/

左から一つずつ見ていきましょう。

“Redirect” => リダイレクトを行う宣言
“permanent” => 恒久的な移動
” / ” => 転送元の URL パス(.htaccess ファイルは、blue.com の直下に置かれているので、blue.com 以下のファイル全てに有効)
“http://green.com” => 転送先の絶対 URL

<一部のディレクトリ転送>
blue.com 以下の circle ディレクトリのみを、green.com 以下の square ディレクトリに転送したい場合の構文はこうなります。

Redirect permanent /circle/ http://green.com/square/

<特定のページ転送>
blue.com 以下の example01.html のみを、green.com 以下の example01.html に転送したい場合の構文はこうなります。

Redirect permanent /example01.html http://green.com/example01.html

RedirectMatch ディレクティブ

Redirect と同じ機能ですが、正規表現を用いて転送元の URL パスのマッチングを行います。

正規表現、後方参照についてはこちらを参照
正規表現の基本
後方参照

RedirectMatch [status] regex URL

左から一つずつ見ていきましょう。

  • RedirectMatch
  • 旧 URL から新 URL へ正規表現を使うリダイレクトの宣言です。

  • [status]
  • Redirect と同じ引数を指定できます。指定がない場合、デフォルトの “temp” となります。

  • regex
  • 転送元の URL パスを、正規表現を使って指定します。

  • URL
  • 転送先の URL を指定します。後方参照を利用できます。

上の図で、blue.com 以下の html ファイルのみ、green.com 以下の対応する html ファイルへ転送する場合の例です。

RedirectMatch permanent /(.+)(\.html)$ https://green.com/$1$2

左から一つずつ見ていきましょう。

“RedirectMatch” => 正規表現を使ったリダイレクトを行う宣言

“permanent” => 恒久的な移動

” /(.+)(\.html)$ ” => 正規表現を使った転送元の URL パス
(.+) = 1字以上の任意の文字列、(\.html) = “.html”、$ = 文字列の文末がマッチ

“http://green.com/$1$2” => 後方参照を使った転送先の絶対 URL
$1 = (.+)、$2 = (\.html)

最後になりましたが、ファイルの最終行には空行を入れる必要があります。
お忘れなく!