Apache Rewrite 学習 : 第01回 個別のURLを転送する

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 本連載では、何回かに記事を分けて Apache Rewrite の設定方法について、サンプルを交えながら解説します。初回の本稿は、下記の設定方法について説明します。

  • 個別URLを別サイトへ転送
  • 個別URLを自サイトの別ページへ転送

※URLを複数まとめて転送設定する方法は、次回の記事をご覧下さい。

設定前の注意事項

「Directory コンテキストや .htaccess で転送設定する場合」と「VirtualHost コンテキストで転送設定する場合」とで、検索条件の先頭に「^/」が必要な場合とそうでない場合とがあります。 どちらのディレクティブに設定しようとしているのかを意識してください。 詳しくは以前の記事「ApacheのRewriteを設定する前に知っておくべきこと」を参考にしてください。

本稿では、VirtualHost ディレクティブで転送設定する場合の記述をしています。 Directory ディレクティブや .htaccess に設定する場合は、「^/」の記述を変更して設定してください。

個別URLを別サイトへ転送

まずは基本的な設定から試していきます。

(1) / ⇒ http://www.google.co.jp

RewriteRule ^/$ http://www.google.co.jp [R=302,L]

(2) /hoge/ ⇒ http://www.google.co.jp

RewriteRule ^/hoge/$ http://www.google.co.jp [R=302,L]

(3) /page.html ⇒ http://www.google.co.jp

RewriteRule ^/page.html$ http://www.google.co.jp [R=302,L]

(1) は、ホームページのルート (例: http://yourdomain.jp/) にアクセスされた場合に、別のホームページ(ここではGoogle)に転送する設定の例です。 自ホームページの全ページに転送設定されたわけではないので注意してください。 (※ホームページ全てに転送設定する例は次回の記事をご覧下さい)

(2) は、特定のディレクトリのルートへのアクセスを転送する設定です。 “/hoge” へのアクセスは転送されない点は注意が必要です。

(3) は、特定のHTMLを指定したアクセスを別サイトへ転送させる例です。

“R=302” の記述は、HTTPステータス 302 でリダイレクトすることを明示的に記述しています。 “R” だけの記述でも 302 でリダイレクトしてくれますが、私は保守性から敢えて “302” を記述するようにしています。 もし 301 (恒久的な移動を表す)でリダイレクトさせたい場合は “R=301” と記述します。

個別URLを自サイトの別ページへ転送

(1) / ⇒ /maintenance.html

RewriteRule ^/$ /maintenance.html [R=302,L]

(2) /hoge/ ⇒ /moge/

RewriteRule ^/hoge/$ /moge/ [R=302,L]

(3) /page.html ⇒ /page-new.html

RewriteRule ^/page.html$ /page-new.html [R=302,L]

(1) は、ホームページのルート (例: http://yourdomain.jp/) にアクセスされた場合に、/maintenance.html に転送する例です。

(2) は、”/hoge/” へのアクセスを “/moge/” に転送しています。 “/hoge” へのアクセスは転送されないので注意してください。

(3) は、別のHTMLファイルに転送する例です。

今回紹介したサンプルの使い所

今回紹介した転送設定の使いどころは以下のような事例があります。

  • 静的なホームページを制作していたが、CMSやシステムの導入により記事のURLが変更になった場合
  • 一時的にトップページへのアクセスをメンテナンス画面に転送し、他のページを更新し、最終確認したい場合 (簡易的なアクセス規制制御)

Apacheのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca