Redirect ディレクティブによるリダイレクト

ある URL にアクセスされた場合、それを別の URL に飛ばしたい場合があります。

それは内部的なものと外部的なものに分けられます。

内部的なものは、ある URL にアクセスされたときに、その URL を処理する機能を別の機能にまかせたいケースです。
Wordpress が自動的に .htaccess に追加するリライトの設定などがそれにあたります。
Wordpress の場合は、/foo/bar などのアクセスがあった場合、基本的には index.php に処理が転送されます。
ブラウザのアドレスバーに変更がないのが特徴です。

外部的なものは、単に別の URL に転送したいケースです。これには HTTP のリダイレクトが使用されます。リダイレクトでは、ブラウザのアドレスバーに表示される URL は転送先のものになります。
リダイレクトでは、同じサイト内で別の URL に飛ばしたい場合と、他のサイトへ飛ばしたい場合があります。


行いたいのは大抵は外部的な URL の転送だと思いますが、リダイレクトする方法を検索すると、リライトによる方法を紹介しているページが多く目に付きます。
しかし、複雑なことをしないのであれば、Apache であればリライトではなく Redirect ディレクティブによるリダイレクトで十分なケースもあるでしょう。

URL階層を引き継いで、別のサイトに飛ばしたい


例えば、http://foo.test/aaa/bbb.htmlhttp://bar.test/aaa/bbb.html に飛ばしたいというケースでは、以下の設定が使えます。

Redirect / http://bar.test/

301リダイレクトにする場合は、以下のようにします。

Redirect permanent / http://bar.test/
#または
RedirectPermanent / http://bar.test/

/aaa の下だけを飛ばしたい場合は、以下のようにすればOKです。

Redirect /aaa http://bar.test/aaa/


URL階層を引き継がないで、別のサイトに飛ばしたい


http://foo.test/aaa/bbb.htmlhttp://bar.test/ に飛ばしたいなど、/aaa/bbb.html であろうが ccc.html であろうが、とにかく http://bar.test/ という1つの URL に飛ばしたいというケースです。

この場合は、RedirectMatch を使用することで実現できます。

RedirectMatch .* http://bar.test/

RedirectMatch は本来、正規表現を使用して Redirect ディレクティブでは実現できない少し複雑な転送を行うものですが、RedirectMatch は Redirect ディレクティブのように URL 階層を引き継ぎませんので、この目的で使用することができます。