複数ファイルの一括リダイレクト

サーバー移転などで、古いアドレスを新しいアドレスに転送させたい場合、.htaccessファイルを、ルートディレクトリに設置して、そこにRedirectの記述をするのが一般的です。

参考にしたサイト
HTTPリダイレクト

転送設定するときにとりあえず覚えておきたいのは以下の3点。


1)特定ディレクトリ以下や拡張子違いなど複数のファイルを一括でリダイレクトさせたい場合、Redirectではなく、RedirectMatchを使う。

RedirectとRedirectMatchの違いは後者が正規表現を使ったリダイレクトが可能だということ。なので、

○ a) Redirect permanent /abc/index.html http://www.example.com/def/index.html
× b) Redirect permanent /abc/* http://www.example.com/def/
○ c) RedirectMatch permanent /abc/* http://www.example.com/def/

a)の場合、index.htmlについてはリダイレクトがうまくいくけれども、index2.htmlなど指定されていないアドレスについてはエラーになってしまう。したがってc)のようにするのがよい。


2)パラメータpermanentを必ずつける。

転送させたいときというのは、もう転送元のアドレスを使用していない場合が多いので、今後永久的にこの移動を設定するという意味のpermanentパラメータをつけることによって、検索エンジンに対して、 301 Moved Permanentlyというステータスコードを返し、次以降はそちらを参照するように、伝えてくれるらしいです。

Google や Yahoo! などの検索エンジンのロボットにおいて移動先のリソースの URI を登録する場合に、ガイドラインで推奨されている手法が、リソースが恒久的に別の場所へ移動したことを伝え、今後は移動先のリソースへと要求するように促す 301 Moved Permanentlyステータスコードを返す Redirectディレクティブの permanentオプション、または RedirectPermanentディレクティブです。この方法を使えば、たとえ URI が変わっても、もとの URI に張られていたリンクなどのリンク元情報を新しい URI に継承させることもできます。



3)上位ディレクトリを*で飛ばしてしまうと、下位のディレクトリを指定しても無視される。

/abc/以下は/def/以下に飛ばしたいけれども、/abc/abc/以下については/def/abc/以下に飛ばしたい、といった場合、

RedirectMatch permanent /abc/* http://www.example.com/def/
RedirectMatch permanent /abc/abc/* http://www.example.com/def/abc/

とやっても無理で、/abc/abc/は、/def/に飛ばされてしまう。なので、/abc/を分けて、個別に設定する必要がある。本当はなんか正規表現でやり方があるのだと思うが、ぱっと分からないのでどなたか教えてください。。