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

さくらのレンタルサーバーのSSL設定をした際の環境が特殊です。そのため、.htacessのリダイレクト機能を用いたHTTPS強制する設定で無限リダイレクトが発生してしまう可能性があります。原因と対処方法を紹介します。

広告 (下に続く)

そもそもさくらインターネットは非推奨としている

SSL利用時の注意点
サービス・プラン表示ここから 対象サービス・プラン   サービス・プラン表示ここまで さくらのレンタルサーバ、さくらのマネージドサーバでSSL機能を利用する際の注意点について記載しています。ドメイン設定関連 ウェブブラウザの挙動 ウェブサーバの挙動***************************...

さくらインターネットの公式ヘルプ「SSL利用時の注意点」では、「SSLのみのアクセス許可(HTTPアクセスの制限)や、mod_rewriteによるURLの書き換えはできません。」と書いてあります。

しかし、色々なサイトには、次のような次のような対処方法が掲載されていました。.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」というヘッダが付いたアクセスをしません。そのため、条件に合致したと判断してリダイレクトされてしまいました。

広告 (下に続く)

対処方法

「HTTPSとしてアクセスした場合はサーバそのものがアクセス元となります。」、つまり、サーバーそのものがアクセスしてきたときは、リダイレクトを行わないようにすればよいのです。つまり、.htaccessは次のようにします。

RewriteEngine On
RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteCond %{REMOTE_ADDR} !=49.212.198.58
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

レンタルサーバーのIPはコントロールパネルの「サーバ情報の表示」→「サーバに関する情報」での「IPアドレス」から確認ができます。

サーバーのIPアドレス確認方法

おそらく、「ENV:HTTPS」の行と「HTTP:X-Sakura-Forwarded-For」の行は不要だと思いますが念のため残しています。

シェアする