ある特定のページのみ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)監修のもと掲載しています。
元記事は、こちら