.htaccessでHTTPアクセスをSSLでリダイレクト(逆もアリ)
.htaccessを使って、HTTPでアクセスされたページをSSLでリダイレクトする方法と、SSLでアクセスされたページをHTTPでリダイレクトする方法です。
今回は、以下の2パターンで試してみました。
環境変数「HTTPS」を使用する場合
※メイビンラボさんのページを参考にさせてもらいました。
一番簡単で分かりやすい方法はコレだと思います。
「RewriteCond」で環境変数「HTTPS」の値を判定します。
.htaccessを全てのディレクトリに置くのは管理が煩雑になってよろしく無いので、DocumentRoot直下にHTTPページ用.htaccessを配置してSSLを使いたいページ(ディレクトリ)にだけSSLページ用.htaccessを配置するとか、.htaccessは一つでRewriteCondでディレクトリを指定するとかが良い方法だと思います。
SSLページ用.htaccess
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </IfModule>
HTTPページ用.htaccess
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] </IfModule>
(補足) RewriteRuleの[R,L]の意味
RewriteRuleの一番後ろに書かれている[R,L]の意味は、
[L]は、定義の最終行(Last)を意味します。この行以降のRewriteRuleは無視されます。一番最後の行に書きます。
http://memorva.jp/memo/linux/mod_rewrite.php
[L]を書かなくても動作します。
[R]は、リダイレクトを行います。
になります。
環境変数「SERVER_PORT」を使用する場合
環境変数「HTTPS」を使用する場合と、ほぼ同じようなやり方です。
「RewriteCond」で判定する環境変数が「SERVER_PORT」に変わっているだけです。
「RewriteCond」で環境変数「SERVER_PORT」の値を判定方法は、
※HTTP/SSLのポート番号について、ここではデフォルトのポート番号を使用していますが、サーバーによっては異なる場合があるので、確認が必要です。
SSLページ用.htaccess
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </IfModule>
HTTPページ用.htaccess
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{SERVER_PORT} 443 RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] </IfModule>
「SERVER_PORT」を使用するメリット
SSLアクセラレータ等を使用している場合、SSLアクセラレータ⇔Apache間の通信がHTTPになるため、環境変数「HTTPS」は常に「off」となってしまい、.htaccessでのリダイレクトが出来なくなります。
SSLアクセラレータ等の設定によっては、SSLアクセラレータ⇔Apache間の通信がHTTPのままでも、接続するポート番号だけを変えられることがあります。
その場合、「SERVER_PORT」を使用することで、HTTP/SSLの振り分けリダイレクトを行うことが出来ます。
※SSLアクセラレータ側でポート番号等を変えられない場合は、.htaccessでは対処出来ないので、他の解決方法を考える必要があります。
今回参考にしたページ
.htaccessだけでSSL対応するには - メイビンラボ
http://www.meibinlab.jp/nishijima/archives/54
mod_rewriteのインストール・設定 - RewriteRuleのサンプル - MEMORVA
http://memorva.jp/memo/linux/mod_rewrite.php
mod_rewrite の R フラグと L フラグについてメモ(R を省略できる場合)- 刺身☆ブーメランのはてなダイアリー
http://d.hatena.ne.jp/a666666/20090409/1239270356
Apacheサーバー構築法 第5回 設定を上書きする「.htaccess」- ITPro
http://itpro.nikkeibp.co.jp/article/COLUMN/20080512/301299/