LoginSignup
4
2

More than 5 years have passed since last update.

.htaccess でForce HTTPS が効かない時 - Apache と環境変数、ヘッダのパースについて

Posted at

よくある記述。

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]

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2