よくある記述。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
これは実のところ一部サーバ環境で動かない。
%{}
は環境変数をチェックする記述だが、一部サーバ構成では環境変数HTTPS
に SSLの情報が入ってこない。
この手のサーバでは大抵ヘッダにhttpsを表すフラグが入ってたりするので、ヘッダを見に行くように設定を直さなければならない。
Apacheの環境変数とヘッダ
厳密には%{}
はサーバ変数をチェックするための記述。環境変数やヘッダのチェックには以下の様な記述が必要になる。
-
%{サーバ変数名}
サーバ変数を参照する。 -
%{ENV:環境変数名}
環境変数を参照する。 -
%{HTTP:ヘッダ名}
HTTPリクエストヘッダを参照する。
サーバ変数と環境変数の違いは以下を参照
さくらサーバでのHTTPS強制
RewriteEngine On
RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://www.sample.com/$1 [R=301,L]
Heroku サーバでのHTTPS強制
##Force SSL
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]