IT女子のお気に入りフォルダ

管理人の備忘録と実践を兼ねた(出来るだけ)役に立つ情報を配信するブログです。

.htaccessファイルでHTTPアクセスをSSLにリダイレクトする方法とその逆も

.htaccessを使って、HTTPアクセスされたページをSSLでリダイレクトする方法と、その逆のSSLでアクセスされたページをHTTPでリダイレクトする方法です。


.htaccessとは、ApacheなどのWebサーバーで使用できる、Webサーバーの動作をディレクトリ単位で制御するためのファイルです。
SSLを使いたいディレクトリに以下を記述した.htaccessファイルを配置します。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

ファイルを個別に指定したい場合の記述は以下のようになります。
例)a.htmlとb.htmlだけをSSL対応したい

RewriteEngine on

RewriteCond %{REQUEST_URI} .*/a.html$ [OR]
RewriteCond %{REQUEST_URI} .*/b.html$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_URI} !(.*/a.html$)
RewriteCond %{REQUEST_URI} !(.*/b.html$)
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

逆にSSLでアクセスされたページをHTTPでリダイレクトする場合は、

RewriteEngine on
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

すなわち、
「HTTPS」がoffの場合 → HTTPでのアクセスなのでSSL(HTTPS)でリダイレクト
「HTTPS」がonの場合 → SSL(HTTPS)でのアクセスなのでHTTPでリダイレクト
というわけです。

ちなみに[R,L]の意味ですが、
[L]は、定義の最終行(Last)を意味します。
この行以降のRewriteRuleは無視されます。一番最後の行に書きます。
[L]を書かなくても動作します。
[R]は、リダイレクトを行います。

最後に.htaccessファイルの配置についてですが、実際の運用では、至る所に.htaccessが散らばると管理がやりにくくなるので、ドキュメントルート直下にSSL→HTTPを記述した.htaccessを配置し、SSLを使いたいディレクトリにだけHTTP→SSLを記述した.htaccessを配置するのが良いと思います。