はじめに
さくらのレンサバでも独自SSL(SNI SSL)が利用できるようになったということで、いろいろ試してみると本当に簡単に導入できました。
インストール手順は以下そのままです。
https://help.sakura.ad.jp/app/answers/detail/a_id/2326
ところが、.htaccessを利用したSSLの強制適用や、URL転送は単純に転送するとループになってしまいうまく動作しないようです。
せっかくSSL対応にしたのに、httpでアクセスされるのはなんとなくイヤなので強制的にhttpsにリダイレクトする方法を考えました。
方法1(2016/6/27追記)
以下のファイルを.htaccessとしてフォルダーに入れます。ポイントとしては転送後につけられるX-Sakura-Forwarded-Forが未設定の場合にのみ転送されます。
RewriteEngine on
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
通常は
RewriteCond %{HTTPS} Off
としておけば、HTTPSがoffの場合のみRewriteが動きます。
方法2(以前の方法です)
index.phpやアクセスのあるスクリプトの先頭に以下のコードを追加します。
<?php
if (empty($_SERVER['HTTPS'])) {
header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
exit;
}
?>
....
さくらのレンサバはhttpとhttpsが同じディレクトリーなので、httpでアクセスがあった場合に、同しパスのhttpsを開くようにするダケです。
コードは混在するとアラートが出るので外部リンク等はすべてhttpsにしておけば良いと思います。これを主要なところに貼り付けておけば対応完了です。
ぶつぶつ
共有SSLの場合にいろいろあるようなのですが、独自の場合でも同様なのかは検証できていません(下記リンク)
参考
- PHPでHTTPS(SSL)接続じゃなかったらHTTPSのURLにリダイレクトする http://blog.ruedap.com/2011/06/08/php-http-https-ssl-url-redirect