さくらインターネットでルートに常時SSL化、それに伴うhttpsリダイレクトは、複数ドメインを運用しているしている場合は要注意

2018年2月13日

常時SSL化が加速している。
レンタルサーバー各社が無料SSLサーバ証明書を提供しているので、導入しやすくなっていることも理由のひとつだ。
さくらインターネットでも無料サーバ証明書「Let’s Encrypt」が提供された。
ただ、サーバ環境によっては、いろいろな問題があることも理解しながら、常時SSL化への設定を行うことも必要だ。
さて、ここでは、さくらインターネットについてのルートドメインでのSSL設定時の注意点を記す。
さくらインターネットの常時SSL化に伴うリダイレクト(http → https)へのリダイレクト設定、.htaccessへの表記が一般的なものとは違う。
しかし、さくらインターネット仕様の情報はいろいろな記事で紹介されており、変更すれば問題なくリダイレクト設定は完了する。
もう一つの問題は、以下の環境で運用している場合に遭遇する。
条件1.
ルート(www)にドメイン設定しているサイトを常時SSL化しリダイレクト処理の設定がある。
ex. ディレクトリ:/www/ ドメイン:https://roto-domein.com
条件2.
ルート以下のディレクトリに、別のドメインを割り当て、サイト運営している。
・このドメインは、SSL化はまだしていない、httpドメイン
ex. ディレクトリ:/www/sub01/ ドメイン:http://sub01-domein.jp
この環境条件の場合、ルートに設置されたhttpsへのリダイレクト設定が、下層の別のドメインにも反映される。
具体的には、
http://sub01-domein.jp → https://roto-domain.com/sub01/
下層ディレクトリに設定されたドメインは無視されて、ルートに設定されたドメインに強制的に書き変わり、そこからのパスのURLとなる。
ルートドメインからのパスに変換されたサイトの表示は、テキストデータはそのまま反映されるが、絶対パスで設定してあるcssや画像などは反映されず、デザイン表記が崩れた状態となる。
ドメイン(http://rainier.taskmother.jp/ → がhttps://www.taskmother.jp/○○○/)無視されて、レイアウトが崩れた状態↓

root-ssl01.jpg


割り当てた正しいドメインURLで表示されていたときのレイアウト↓

root-ssl02.jpg

実際、物理的には、roto-domain.com/sub01/でアクセスすることは可能なので、このサーバの仕様上、当たり前と言えばそうなのである。
そして同様に、ルートに設定された.htaccessが、wwwより下層にも反映される。
例外条件:
ルート以下のディレクトリに、別のドメインを割り当て、常時SSL化したサイト運営をしている。
そして、httpsリダイレクト設定済みの場合である。
ex. ディレクトリ:/www/sub01/ ドメイン:https://sub01-domein.jp
この場合は、ドメイン設定されたディレクトリ(フォルダ)のhtaccessが優先されるためである。
さて、例外条件を除く、この環境での回避対応策。
いちばん、簡単な方法は、
1.ルートドメインの常時SSL化の前に、下層のドメインの常時SSL化、httpsへのリダイレクト設定を行う。
 例外条件と同様になるように、httpsリダイレクト設定まで行う。
2.下層に設定したドメインのディレクトリ(フォルダ)に、リダイレクト無効処理を書いた.htaccessを設置する。
ex. /www/sub01/ http://sub01-domein.jp 
 /www/sub01/ の場所に、
————-
RewriteEngine Off
————-
を表記し、.htaccessを設置する。
ただし、すでに.htaccessが存在し、別のリダイレクト処理を行っている場合は使えない。
3.ルートのhttpsリダイレクト設定に条件を加える。
例外処理として、指定したディレクトリはhttpsにリダイレクトしない記述を書く。
RewriteCond %{REQUEST_URI} !(^/除外ディレクトリ名/)
ex. ディレクトリ:/www/sub01/ ドメイン:http://sub01-domein.jp 
この場合は、
————-
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !(^/sub01/)
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://www.taskmother.jp/$1 [R=301,L]
</IfModule>
————-
しかし、これを表記して試してみたが、当方の環境では上手く行かなかった。
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
の下に変更したが上手く行かず。
その際、いろいろ変更しまくったので、キャッシュなどが残っていて、実は有効になっていたかもしれないが、この方法より、とりあえず2の方法で対応できたので、深く追求せず。
今後は、無料SSLサーバ証明書が提供されたので、順次、他の下層ドメインを常時SSL化して、またルートのhttpsリダイレクトを復活させる予定である。