Help us understand the problem. What is going on with this article?

htaccessでHTTPSにリダイレクトする

More than 3 years have passed since last update.

エンジニアたるものhttpは使わないようにしましょう。使う意味がありません。
しかし、世の中にはすでにhttpで運営されてるサイトやAPIがたくさんあります。
そこで今回はすでにhttpだけど、httpsでの運用に切り替えるときに使うhtaccessを書こうと思います。
(検索しても意外と決定版みたいなのないので)

単純な場合

これはapacheが1台の構成の場合のものです。特に上流にバランサ(ELBなど)がない場合を想定しています。
下記のような内容で.htaccessを書きましょう。

/var/www/html/.htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

このなかでRewriteRuleの最後に書いてある[R=301,L]のとこなのですが、Rがリダイレクトを指しており、=301を省略すると302がデフォルトになります。
用途に応じて使い分けると良いでしょう。

  • [R=301,L] 永久的なHTTP→HTTPS
  • [R,L] 一時的なリダイレクト

ロードバランサー(80,443対応)の配下にある場合

これはAWS環境でELBがある場合や、その他のプロプライエタリなロードバランサ(LoadMaster、BigIP、Coyote、A10など)の場合に適用できます。もちろんNginxなどのリバースプロキシを使う場合も有効です。
基本的には上流のバランサーにHTTP/HTTPSに応じてリクエストヘッダーを付与してもらいます。
apacheではその内容に応じたRewriteCondを記述します。

例えばAWS環境のELBの場合は下記のようになります。

/var/www/html/.htaccess
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

2行目のRewriteCondはHTTPだった場合に付加されるリクエストヘッダーを想定しています。これは製品によって異なりますが、%{HTTP:X-Forwarded-Proto}はAWSのELBの標準的なリクエストヘッダーです。

まとめ

apacheでやる限りだいたい上記の2パターンで事が足りるでしょう。もし細かく制御したいケースやご要望などあれば追記しますので、コメントなどでどうぞ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした