【htaccess】さくらインターネット 独自SSL(SSL SNI)を使ったhttp→httpsへの自動転送でちょっとハマる

「とりあえずhttps:にしたかっただけなんですよ」というアレな案件

 

導入・設置はしやすいけど…ちょっとクセあり。

やってみて気づいたのだけど、さくらインターネットのレンタルサーバで、独自ドメイン+外部SSL証明書が非常に設置しやすくなっているめることを(いまさら)やってみて知った。

サーバコントロールパネルのドメイン設定欄から、すべてweb上で行えました。鍵の生成から、CSRも勝手に吐き出してくれるのでお手軽ラクチン…。Comodoの3年で15ドルという格安証明書を取得して、設置してみた。

証明書取得→設定するフェーズは割愛(ぉ

その辺はまた別記事にするとして…オレオレ証明書でなくなったため、特に警告も出ることなく、HTTPSでのアクセスが可能になりました。

で、早速

httpアクセスをhttpsにリダイレクトするおまじないをhtaccessに記述したところ…

	RewriteCond %{HTTPS} off
	RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

ページの自動転送設定が正しくありません。
2016-11-10_12h21_38
orz…

どうやらさくらインターネットのポート443へのアクセスはhttpsアクセスはプロキシとして作動するという仕様だそうで、htaccessを解釈する段階では→内部的にはhttpsでのアクセスか否かは判別できないため、

Rewritecond %{HTTPS} off

は条件として使えない(というかこの条件を満たさない)ようです。

そのため、httpsでアクセスすると Rewriteが繰り返され、無限ループ…と。

早くも詰んだ…と思ってちょっと調べたところ、逃げ道は用意されているようで…。たくさんの記事がヒットしました。プロキシ通過の際に、独自ヘッダを追加するようで、それを条件にすれば思惑通りの動作をしてくれるとのことで…

付け加えられるヘッダ

ENV:HTTPS ON
HTTP:X-SAKURA-FORWARDED-FOR

が付与されるようです。
それを踏まえて、Rewritecondに以下の二行を追加すればOK?

	RewriteCond %{ENV:HTTPS} !^on$
	RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$

そんなわけで、合成するとこちらです↓

さくらインターネットSNISSLで、全てのhttpアクセスをhttpsに転送するhtaccess

#これ効かない
	RewriteCond %{HTTPS} off
#こっちがちゃんと反応する
	RewriteCond %{ENV:HTTPS} !^on$
	RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
	RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

数ページチェックしましたが、特に問題なく動作しているようですので、これでOKでしょう。

※明示されている方法ではないので今後仕様は変更される可能性もあります。

コメントを残す

メールアドレスが公開されることはありません。