ある特定のページのみhttpをhttpsにするという、よくある作業があったのですが、
ELBにSSL証明書を入れており、ELB(ポート番号:443)→EC2(ポート番号:80)という設定のため、
EC2上では80で来るので、このような場合はいつもアプリ側でヘッダーを確認し切り分けていたのですが、
ApacheレベルのRewriteCondで対応できないものかと思い試してみました。

※httpでリクエストされた/adminはhttpsに飛ばします。

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^/admin https://%{HTTP_HOST}/admin/

上記を設定したところ、下記にリダイレクトされることを確認します。

http://hoge.jp/admin/ → https://hoge.jp/admin/

/admin配下のものはすべて同じページに飛ばすには下記のようにします。

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^/admin/(.*)$ https://%{HTTP_HOST}/admin/$1

上記の設定後、下記のように元のURLでhttpsになるので便利です。

http://hoge.jp/admin/hoge.html → https://hoge.jp/admin/hoge.html

逆にする場合は、下記のようにします。

RewriteCond %{HTTP:X-Forwarded-Proto} =https

こちらの記事はなかの人(kenjionsoku)監修のもと掲載しています。
元記事は、こちら