httpからhttpsにリダイレクト(常時SSL化)する方法|Apache .htaccess

Apache,ミドルウェア

httpからhttpsにリダイレクト(常時SSL化)する方法

Webサイトで http:// へのアクセスを全て https:// にリダイレクトする方法をメモ。

前提・環境

  • Webサーバー(httpd) は Apache
  • 設定は .htaccess を使用

http → https リダイレクトについて

具体的には下記の例のようにURL1にアクセスがあった場合に、対応するURL2に自動的に転送する。

URL1(アクセス元) URL2(転送先)
http://example.com https://example.com
http://www.example.com https://www.example.com
http://www.example.com/js/hogehoge.js https://www.example.com/js/hogehoge.js
http://www.example.com/img/hogehoge.png https://www.example.com/img/hogehoge.png
http://www.example.com/a/001 https://www.example.com/a/001

なんでリダイレクトするの?

SSLを導入しサーバーとの通信をSSL/TLSで暗号化する(https://でアクセスできる)事で、第三者に情報を読み取られないようにする準備が整っても
暗号化がされていない非SSLでの通信(http://でアクセス)ができる環境が存在していては、その効果が減ってリスクが増えるため。

どんなケースがあるの?

Webサイトが過去にhttpで運営されていた場合、httpでアクセスされる以下のようなケースが考えられる。
(httpでアクセスできるURLを古いURLとします)

  • Google などの検索エンジンに古いURLが記録されている
  • 誰かが古いURLをブックマークしている
  • 別のサイト等から古いURLにリンクされている
  • 自サイト内での参照(リンク)が、絶対パスの古いURLになっている

設定方法

今回は.htaccessで設定するので、以下のコードを対象サイトのドキュメントルートにある.htaccessに追記する。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

# httpへのリクエストをhttpsにリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
  • <IfModule mod_rewrite.c>RewriteEngine on等すでに設定が存在すれば、それ以外を追記してもOK
  • この説明自体が良くわかんない人は、危ないからやらないか、とにかく.htaccessの一番したに追記する

補足・参考

ちなみに上記の設定をおこなっても、自サイト内のHTMLコード上での絶対パス参照(リンク)が http になっている場合
ブラウザ上では警告が表示されてしまうので、かなり面倒だけどサイト内の全てのコードは http から https に修正した方がいい。