Htaccessを使ったリダイレクトを学ぶ

htaccessを使ったリダイレクトはたまに設定するけれど、いつもよくわからないままだったのでちょっと調べてみた。

やりたかった事

今回やりたかった事は、
特定のサブドメインにアクセスがあった場合に、別のサブドメインに転送する、というもの。
hoge.sample.comを、redirect.sample.comにリダイレクトするとする。

なので今回はこれを実現する部分のみの調査となってます。

RewriteCond

書式はこんな感じ。

RewriteCond %変数名(テスト文字列) 条件パターン(正規表現) [フラグ]

変数名は、{}で囲んで記述する。
特定のサブドメインにアクセスがあったら、という条件なので、変数は、
HTTP_HOSTを使用。HTTP_HOSTはホスト名、
例えば、http://test.example.com/test.htmlというアドレスにアクセスがあった場合は、test.example.comのみを取得する。
変数を入れると以下。

RewriteCond %{HTTP_HOST} 条件パターン(正規表現) [フラグ]

条件パターンはこの場合は特定のサブドメイン、というものだけなので、そのまま書けば良い。

RewriteCond %{HTTP_HOST} ^hoge.sample.com$ [フラグ]

ただしそのままとは言っても全くそのままではなく、先頭と末尾の指定がいるよう。
^が行頭を表す記号。$が行末を表す記号。となる。

残ったフラグ、は、AND、OR、大文字小文字の区別、を記述する。
RewriteCondを複数行指定し、ここに条件を書くことになる。

RewriteCond %{xx} ^条件1$ [OR]
RewriteCond %{oo} ^条件2$

こうすれば、条件1か条件2がヒットすれば、となる。

大文字小文字の区別は、区別しない場合にNCと書く。
デフォルトでは区別する。
今回は区別するってことで指定なしで。

RewriteRule

書式はこんな感じ。

RewriteRule URL書換&転送の記述 [オプション]

今回はドキュメントルートにアクセスされたら、指定のサブドメインにリダイレクト、となるので、以下のように。

RewriteRule ^/$ http://redirect.sample.com

行頭行末で/を囲んで、ドキュメントルートを指定。
リダイレクト先に別のサブドメインを指定。
ただし、ドキュメントルートの指定は/で始める場合と始めない場合があるよう。
ApacheのRewriteを設定する前に知っておくべきこと | WEB ARCH LABO

サーバー環境によって変わってくるって事はわかった。
今回はどうやら/は必要ないようだったのでなしで設定した。

あとはオプション。
リダイレクトの方法は今回は恒久的なリダイレクト、ってことで、301を指定。 301リダイレクトと302リダイレクトの違い | 海外SEO情報ブログ
特に理由がない限りは301でよさそう。

もう一つ、オプションとして、Lをつけておく。
Lをつけておくとこのルールが適用された場合はこれ以降のルールは使用しない、という設定となる。
その他のオプションについては以下。
Apache : mod_rewriteリファレンス – dawgsdk.org

最終的なルールは以下。

RewriteRule ^$ https://ssl.cp.4143.com [R=301,L]

今回は使用していないが、もし複数のルールが合った場合はどうなるかと言うと、条件に対しては一つしかルールは設定出来ないよう。

RewriteCond 条件1
RewriteRule ルール1
RewriteRule ルール2

上記のような記述があった場合、条件1が満たされる場合はルール1が適応され、それ以外はルール2が適応される。
なので条件を指定する場合は、RewriteCondRewriteRuleをセットで書く必要がある。

結果

完成。

RewriteCond %{HTTP_HOST} ^cp.4143.com$
RewriteRule ^$ https://ssl.cp.4143.com [R=301,L]

最終的な記述

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^cp.4143.com$
    RewriteRule ^$ https://ssl.cp.4143.com [R=301,L]
</IfModule>

参考

Apache RewriteCond の基礎知識 | WEB ARCH LABO
RewriteCond – RewriteRuleの条件を設定
.htaccess mod_rewriteで画像直リンク禁止 – 趣味を綴る日記
ステム覚書帳 : [Apache]RewriteCondとRewriteRuleは抱き合わせで

   このエントリーをはてなブックマークに追加