さくらのレンタルサーバーでよくある.htaccess
を実践する。独自ドメインが前提。
httpからhttpsにリダイレクト
#RewriteEngine on
#RewriteCond %{HTTPS} off
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URL} [R=301,L]
普通ならこのようにすればよいが、さくらのレンタルサーバーのSSL/TLSはリバースプロキシを利用している関係で、Apacheのmod_sslによるSSL/TLSを対象にしているRewriteCond %{HTTPS} off
ではうまくいかない。HTTPSアクセスの場合はどこかしらで環境変数HTTPS = on
がセットされているのでこれを利用する。
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URL} [R=301,L]
または、HTTPSアクセスの場合のみ%{HTTP_X_SAKURA_FORWARDED_FOR}
が出現するので、これを使っても良い(が、この方法ではヘッダにX-SAKURA-FORWARDED-FOR
が入っているHTTPリクエストを誤判定するので、HTTPS
環境変数の方が無難)。
wwwサブドメイン
さくらのレンタルサーバーで独自ドメインを運用する場合、ドメイン名example.com
に対してサブドメインwww.example.com
でのアクセスを可能にするかどうかを選ぶことができる。www付きドメインでのアクセスを不可能にする設定にした場合、www付きドメインへのアクセスはさくらインターネットのエラー画面が表示されるようになる。そこで、www付きドメインでのアクセスを可能にした上で.htaccess
でwwwなしのドメインへ転送したくなる。
RewriteEngine On
RewriteCond %{SERVER_NAME} !^example\.com [NC]
RewriteRule ^ http://example.com/%{REQUEST_URI} [R=301,L]
組み合わせ
この2つを組み合わせようとするとうまくいかない。www付きドメインへのアクセスであっても、HTTPSアクセスがリバースプロキシされる過程でHost
HTTPヘッダがwwwなしのものになるため、Apacheに辿り着く時には情報が失われていて、環境変数などサーバーから観測できる範囲の情報ではどちらからのアクセスかは判別することができず、どうしようもない。
.htaccess
の範囲ではないが、wwwなしのドメインを「www付与せず」の設定にした上でwww付きのドメインを追加で登録することで目的を達成することができるようである。(なお、今度はwww.www.example.com
が問題になるが、これはもうどうしようもないので諦める)
その他
Apacheのバージョンは2.4系。2017年9月27日までは2.2系だった。