常時SSLによる無限リダイレクトが発生した場合の対処法

さくらのレンタルサーバーの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」ではリンクエラーと表示しましせんでした)。

Broken Link Checkerでのログ

原因

cURLを用いたアクセスでは、「X-Sakura-Forwarded-For」というヘッダが付いたアクセスをしません。そのため、条件に合致したと判断してリダイレクトされてしまいました。

WordPressの場合の対処方法

WordPressを使用している場合は、.htaccessを使用せず、さくらインターネットが提供している常時SSL化プラグインを使用すると解消します。

【WordPress】常時SSL化プラグインの使い方
対象サービス・プラン さくらのレンタルサーバ、さくらのマネージドサーバ上で稼働するWordPress(ワードプレス)にて、常時SSLを有効にするプラグインを利用する方法について記載しています。 前提条件 設定手順 -----------------------------------------------...

その他の場合の対処方法

WordPressを使用していない場合は次のヘルプに記載された.htaccessコードへ変更すると解消します。

赤色にしている部分が重要で、これがないとHTTPSであってもENV:HTTPSがonになりません。無限ループします。

.htaccessによるアクセス制御
サービス・プラン表示ここから 対象サービス・プラン   サービス・プラン表示ここまで .htaccessを配置することで、ウェブアクセスに関わる設定を行なう事ができます。 前提条件 特定のドメイン名やIPアドレスからの閲覧を【拒否】したい 特定のドメイン名やIPアドレスからのみ閲覧を【許可】したい ディレクト...
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>

コメント