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が適応される。
なので条件を指定する場合は、RewriteCond
とRewriteRule
をセットで書く必要がある。
結果
完成。
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は抱き合わせで