さくらのレンタルサーバーのSSL設定をした際の環境が特殊です。そのため、.htacessのリダイレクト機能を用いたHTTPS強制する設定で無限リダイレクトが発生してしまう可能性があります。原因と対処方法を紹介します。
2018年9月15日:さくらインターネット側で常時SSL方法についてのマニュアルがいつの間にか追加されていたため、全面的に内容を更新しました。
リダイレクトループが発生する原因
執筆時、さくらインターネットは.htaccessを用いて常時SSLにすることをサポート外としていた上に、一般的に使用される方法では常時SSLにすることができない状態でした。
様々なサイトに、次のような次のような対処方法が掲載されていました。.htaccessに次のコードを追加するというものです。
RewriteEngine On
RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
HTTPSとしてアクセスした場合はサーバそのものがアクセス元となり、「X-Sakura-Forwarded-For」というヘッダが付いたアクセスをすることを利用したものです。
無限ループが発生
しかし、phpのcURLを用いたアクセスを行うと、次のようにエラーが出力されました。無限リダイレクトが発生したと考えられます。
[日付] Maximum (5) redirects followed at https://example.com/
また、WordPressのプラグイン「Broken Link Checker」でも同様に発生しました(10回リダイレクトした挙句、「Broken Link Checker」ではリンクエラーと表示しましせんでした)。
原因
cURLを用いたアクセスでは、「X-Sakura-Forwarded-For」というヘッダが付いたアクセスをしません。そのため、条件に合致したと判断してリダイレクトされてしまいました。
WordPressの場合の対処方法
WordPressを使用している場合は、.htaccessを使用せず、さくらインターネットが提供している常時SSL化プラグインを使用すると解消します。

その他の場合の対処方法
WordPressを使用していない場合は次のヘルプに記載された.htaccessコードへ変更すると解消します。
赤色にしている部分が重要で、これがないとHTTPSであってもENV:HTTPSがonになりません。無限ループします。

SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
コメント