httpからhttpsにリダイレクトさせるこの処理
RewriteEngine On
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://domain/$1 [R=301,L]
は、さくらのレンタルサーバーを利用している人の間ではあまりにも有名なおまじないです。
また同時に、これほど、コピペのまま使わている処理もないでしょう。
このコードを一層分けわからなくさせているのが、2行目の
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
です。サーバー変数が空の場合除外するだろうこと以外はほぼ意味不明です。
今回はこの2行目の処理について解説します。
ざっくりこの2行目の『機能』としては受け取ったHTTPリクエストの中の
X-Sakura-Forwarded-For
というヘッダーの中身が空でなければ、3行目の対象になるというものです。
2行目がある『理由』
では前述した機能がなぜ、さくらサーバーにおいて、httpsのアクセスのフラグになり得るのか?
それは、さくらサーバーがリバースプロキシと呼ばれる仕組みを使ってSSL通信を実現しているからです。
リバースプロキシとは、簡単に説明すると、
ファイルが置いてあるサーバーとは別に、関所のように別のサーバーを必ず経由させるとき、この関所の働きをするサーバーをリバースプロキシと呼びます。
さくらサーバーでは暗号通信を担うサーバー(リバースプロキシ)が最初にアクセスを受け、その後、実際にファイルのあるサーバーにアクセスする仕組みを採用しています。
ここで特に注意したいのが、.htaccessが読み込まれるタイミングは実ファイルが格納されているサーバーにアクセスがあったときであり、.htaccess的にはリバースプロキシサーバーからの通信となるわけです。
感の鋭い人はもうわかったのではないでしょうか?
つまり、リバースプロキシサーバーからのHTTP通信のヘッダーに
X-Sakura-Forwarded-For
が記載されているのです。
ちなみにこの
X-Sakura-Forwarded-For
は、AddHeaderと呼ばれる機能でサーバー側で別途設定しなければ生成されないヘッダーです。
X-Forwarded-Forと呼ばれるヘッダーの亜種なのですが、役割や、詳しい説明は
下記を参照してください。
2行目の『意味』
つまり、この記載をより意味に即して説明するならば、
このアクセスの途中にSSL通信を担うリバースプロキシを通っていれば、
次の行の処理をする
というコードになります。