Redirectディレクティブ:URLのリダイレクトを行う

Redirect ディレクティブは、古い URL から 新しい URL へのリダイレクトを実行します。 RewriteRule ディレクティブでもリダイレクトを行うことができますが、特定の URL を別の URL にリダイレクトするなどシンプルなリダイレクトの場合は Redirect ディレクティブを使うことで簡潔に記述することができます。ここでは Apache の Redirect ディレクティブの使い方について解説します。

(Last modified: )

Redirectディレクティブの使い方

Redirect ディレクティブは古い URL から新しい URL へのリダイレクトを行います。書式は次のとおりです。

Redirect [ステータス] URLパス URL

記述できる場所は httpd.conf, VirtualHost, Directory, .htaccess です。 .htaccess で設定する場合は AllowOverride FileInfo が設定されている必要があります。

古い URL を指定するための Redirect ディレクティブの URL パスは必ずドキュメントルートからの絶対パスで指定する必要があります。またステータスを省略した場合は 302 リダイレクトを行います。他の方式を使用する場合はスタータスへ HTTP スタータスコードを指定するか、次のいずれかの値を指定してください。

permanent  301
temp       302
seeother   303
gone       410

HTTP スタータスコードを直接指定する場合、 300 番台の値を指定する場合はリダイレクト先の URL を指定する必要があります。 400 番台の値を指定する場合は URL を指定しないでください。

例えばファイル単位で 301 リダイレクトを行う場合は次のように記述します。( 301 の部分は permanent と記述しても同じです)。

Redirect 301 /blog/hello.html http://localhost/myblog/hey.html

この場合、 /blog/hello.html へのアクセスは http://localhost/myblog/hey.html へリダイレクトされます。

ディレクトリ単位で 301 リダイレクトを行う場合は次のように記述します。

Redirect 301 /blog http://localhost/myblog

この場合、 /blog に含まれるファイルやサブディレクトリへのアクセスは http://localhost/myblog/ ディレクトリ内の同じファイル名やサブディレクトリへリダイレクトされます。

サイト単位で 301 リダイレクトを行う場合は次のように記述します。

Redirect 301 / http://www.example.jp

この場合、現在のサイトに含まれるすべてのアクセスは http://www.example.jp サイトの同じファイル名やディレクトリへリダイレクトされます。

では実際に試してみます。今回はディレクトリ単位のリダイレクトを行ってみます。 http://localhost/ のドキュメントルートに設置した .htaccess に次のように記述しました。

Redirect 301 /blog http://localhost/myblog

Redirectディレクティブの使い方(1)

httpd.conf ファイルで、ドキュメントルートのディレクトリに対してはデフォルトで次のように設定されています。

<Directory "${SRVROOT}/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

次のように修正してください。修正が終わりましたら httpd.conf ファイルを保存し、 Apache を再起動しておいてください。

<Directory "${SRVROOT}/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride FileInfo
    Require all granted
</Directory>

ブラウザから http://localhost/blog/hello.html へアクセスします。

Redirectディレクティブの使い方(1)

/blog ディレクトリの中のファイルへのアクセスは /myblog ディレクトリへリダイレクトされるので http://localhost/myblog/hello.html へリダイレクトされました。

Redirectディレクティブの使い方(3)

条件に一致したときだけリダイレクトするなど、より複雑なリダイレクトの設定が必要な倍は RewriteRule ディレクティブ及び RewriteCond ディレクティブを使用してください。それぞれの使い方については「RewriteRuleディレクティブ:URLのリライト/リダイレクトを行う」および「RewriteCondディレクティブ:URLのリライト/リダイレクトを行う条件を定義する」を参照されてください。

-- --

Apache の Redirect ディレクティブの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。