.htaccessファイルでHTTPアクセスをSSLにリダイレクトする方法とその逆も
- 公開日:2013/6/10
.htaccessを使って、HTTPアクセスされたページをSSLでリダイレクトする方法と、その逆のSSLでアクセスされたページをHTTPでリダイレクトする方法です。
.htaccessとは、ApacheなどのWebサーバーで使用できる、Webサーバーの動作をディレクトリ単位で制御するためのファイルです。
SSLを使いたいディレクトリに以下を記述した.htaccessファイルを配置します。
<br> RewriteEngine on<br> RewriteCond %{HTTPS} off<br> RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]<br>
ファイルを個別に指定したい場合の記述は以下のようになります。
例)a.htmlとb.htmlだけをSSL対応したい
<br> RewriteEngine on</p> <p>RewriteCond %{REQUEST_URI} .*/a.html$ [OR]<br> RewriteCond %{REQUEST_URI} .*/b.html$<br> RewriteCond %{HTTPS} off<br> RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]</p> <p>RewriteCond %{REQUEST_URI} !(.*/a.html$)<br> RewriteCond %{REQUEST_URI} !(.*/b.html$)<br> RewriteCond %{HTTPS} on<br> RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]<br>
逆にSSLでアクセスされたページをHTTPでリダイレクトする場合は、
<br> RewriteEngine on<br> RewriteCond %{HTTPS} on<br> RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]<br>
すなわち、
「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を配置するのが良いと思います。
2019.10.7 追記
SSL強制以外にもよく使う記述をまとめました。
.htaccessでURL正規化(wwwあり・なし、https強制、index.html(php)なし)