\目次/
SSL化の手順を間違えてログインできなくなった
先日、お客様より、レンタルサーバーでSSL申請する前に「WordPressアドレス」と「サイトアドレス」を、http:// から https:// に変更してしまいログインできなくなったため、何とかして欲しいというご相談を受けました。
ブラウザでサイトにアクセスしたところ、「ERR_TOO_MANY_REDIRECTS」が表示されておりました。
このエラーは一般的にWordPressサイトの設定変更後、またはサーバー上のリダイレクトの設定ミスを理由に発生します。
いわゆるリダイレクトループというものです。
当初、「WordPressアドレス」と「サイトアドレス」を修正すれば解決すると思っていました。
しかし、うまく行かず試行錯誤することに・・・その過程で新しい発見や学びがあり、備忘のため、まとめておくことにしました。
リダイレクトループ時の対応方法
- 特定のウェブサイトのクッキーを消去する
- WordPressサイト、レンタルサーバーのキャッシュをクリアする
- リダイレクトループの原因を特定する
- HTTPS設定を確認する
- WordPressウェブサイトの設定を確認する
- 一時的にWordPressプラグインを無効にする
- サーバーのリダイレクトを確認する
- 最終手段(PHPコーディング)
特定のウェブサイトのクッキーを消去する
GoogleでもMozillaでも、「クッキーを消去してみてください」という推進事項がエラーの直下に表示されます。
クッキーには、ERR_TOO_MANY_REDIRECTSエラーの原因となるデータが含まれていることがあります。
この対策は自分のウェブサイトだけでなく、どのウェブサイトでも行うことができます。
クッキーがすべてのウェブサイトの「ログイン」状況またはその他の設定の情報を保持しているため、不具合が発生しているウェブサイトのみでクッキーを消去した方がよいでしょう。
そうすると、頻繁に訪れる他のウェブサイトには影響しません。
Google Chromeで特定のウェブサイトのクッキーを消去するには、下記リンクの手順に従ってください。
WordPressサイト、レンタルサーバーのキャッシュをクリアする
リダイレクトループはキャッシュ可能なレスポンスであるため、WordPressサイト、サーバー、サードパーティプロキシサービス、必要に応じてブラウザのキャッシュをクリアした方がよいでしょう。
WordPressウェブサイトのキャッシュをクリアする
リダイレクトループの種類により、WordPress管理画面にアクセスできる可能性があります。
アクセスできる場合には、キャッシングプラグインの設定画面で簡単にキャッシュをクリアすることができます。
人気プラグインのそれぞれでWordPressのキャッシュをクリアする方法については下記をご参照ください。
レンタルサーバーのキャッシュをクリアする
レンタルサーバーの多くは、WordPressサイトのキャッシュをクリアできる独自のコントロールパネルツールがあります。
WEB先案内ではXサーバーをよく使っているので、参考までにブラウザキャッシュの設定方法をご紹介します。
リダイレクトループの原因を特定する
キャッシュをクリアしてもリダイレクトループが消えない場合は、リダイレクトループの原因を特定する必要があります。
無料のオンラインRedirect Checkerは不具合の分析ができます。なお、分析はcURLを介して行うこともできます。
すべてのリダイレクトを確認することにより、ループバックするか、HTTPからHTTPSへのリダイレクトのループか、を判断できます。
Google Chromeの拡張機能「Redirect Path」は、ウェブサイトのすべてのリダイレクト(特定のURLまたはページ)についての情報を提供するため、非常に便利です。
HTTPS設定を確認する
次に確認するのはHTTPSの設定です。ERR_TOO_MANY_REDIRECTSが発生するのは、WordPressウェブサイトをHTTPSに移行した直後に発生するのはよくある話です。
原因は不十分な設定または設定ミスです。
1. SSL証明書なしでHTTPSを強制しないこと
SSL証明書なしでHTTPSを強制することは本エラーの最も一般的な原因です。
SSL証明書をインストールせずに、WordPressウェブサイトをHTTPS経由で読み込まれるようにすると、ウェブサイトがリダイレクトループに入ってしまいます。
対策は単にSSL証明書をインストールすることです。
また、SSLチェックを実行することもお勧めします。
SSL/TLS証明書には、メイン証明書だけでなく、中間証明書もインストールし、適切に設定する必要があります。
Qualys SSL Labsの無料SSLチェックツールを使用することをお勧めします。
信頼性が非常に高い為、証明書を検証するときにすべてのお客様を対象にこのツールを使用します。
SSLチェックツールにアクセスし、「ホストネーム」フィールドにドメインを入力し、「送信」をクリックするだけです。必要に応じてパブリックな結果を非表示にすることもできます。
ウェブサーバー上のサイトのSSL/TLSコンフィギュレーションをスキャンするのに1〜2分かかることがあります。

2. SSLプラグインを使用しないで、ハードコードされたリンクを更新すること
Really Simple SSLなどのHTTPSを自動的にリダイレクトする無料のSSL WordPressプラグインがあります。
ただし、サードパーティプラグインを利用すると、常に課題または互換性問題が生じる可能性があるため、この方法を応急処置としない方がいいです。
一時対策として使用してもいいですが、必ずハードコードされたHTTPリンクを更新する必要があります。
3. サーバー上のHTTPからHTTPSへのリダイレクトを確認する
おそらく、サーバー上のHTTPSリダイレクトルールが誤って構成されている可能性があります。
NginxでHTTPをHTTPSにリダイレクトする
ウェブサーバーがNginxを使用している場合、Nginxの設定ファイルに次のコードを追加することにより、すべてのHTTPトラフィックをHTTPSに簡単にリダイレクトできます。
Nginxで動作するWordPressをリダイレクトするために推奨される方法です。
server { listen 80; server_name domain.com www.domain.com; return 301 https://domain.com$request_uri; }
ApacheでHTTPをHTTPSにリダイレクトする
WebサーバーがApacheを使用している場合、.htaccess
ファイルに次のコードを追加することにより、すべてのHTTPトラフィックをHTTPSに簡単にリダイレクトできます。
Apacheで動作するWordPressをリダイレクトするために推奨される方法です。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
WordPressウェブサイトの設定を確認する
次に、WordPressウェブサイトの一般設定を確認します。
間違ったドメインを指しておらず、不一致がないかを検証するのに、2つの項目を確認する必要があります。
ウェブサイトに適切な(wwwまたは非www)プレフィックスを使用していないことはよくある不具合原因です。
ユーザーがホストまたはドメインを切り替えて、本項目が変更した認識がないことがあります。
- 「WordPressアドレス(URL)」:ブログへのアクセスができるアドレス
- 「サイトアドレス(URL)」: WordPressのコアファイルへのアクセスができるアドレス
WordPressの独特なディレクトリを与えていない限り、上記の2つが一致するはずです。
ただし、エラー時にはWordPressのダッシュボードにアクセスできない可能性があります。
そこで、wp-config.phpに値を入力し、上記の設定を上書きすることができます。
wp-config.phpは通常WordPressウェブサイトのルートにあり、FTP、SSH、WP-CLI経由でアクセスできます。
WP_HOMEとWP_SITEURLをハードコーディングするには、次のコードを入力し、正しいドメインを反映するように値を変更します。
define('WP_HOME','https://yourdomain.com');
define('WP_SITEURL','https://yourdomain.com');
手動設定ができたら、ウェブサイトに戻り、リダイレクトループが回復しているか確認できます。
マルチサイト
マルチサイトでドメインを変更する場合は、必ずwp_blogs
テーブルも確認してください。
検索と置換を誤って行うと、ネットワークサイトがサブサイトと一致しないため、無限のリダイレクトループが発生する場合もあります。
wp_#_options
:各サブサイトには、wp_blogs
テーブルのblog_id
に対応する一連のテーブルがあります。#がblog_id
に対応するwp_#_options
テーブルにアクセスし、そのテーブルの「SITEURL」と「HOME」の設定を更新します。
サーバーのリダイレクトを確認する
サーバーのHTTPからHTTPSへのリダイレクトのほかに、設定が間違っているリダイレクトがないかを確認した方がよいでしょう。
たとえば、転送元と転送先が同じである301リダイレクト1件だけでウェブサイト全体がダウンする恐れがあります。リダイレクトは通常、サーバの設定ファイルにあります。
Apacheの.htaccessファイル
Apacheを採用しているWordPressホストをご利用の場合は、.htaccess
ファイルに間違ったルールがある可能性があります。次の手順に従って、一から新しいのを作り直してください。
まず、FTPまたはSSH経由でウェブサイトにログインし、.htaccess
ファイルの名前を.htaccess_old
に変更します。これにより、バックアップが残ります。
※必ずしも「_old」に変更する必要はないです。例えば、「_bk20210627」というようにバックアップした年月日を追記すると運用が効率化されると思います。
通常、このファイルを再作成するには、WordPressのパーマリンクを再保存するだけです。
ただし、ERR_TOO_MANY_REDIRECTSエラーが発生したときにはWordPressのダッシュボードにアクセスできない為、上記ができません。
したがって、新しい.htaccess
ファイルを作成し、次の内容を入力し、サーバーにアップロードする必要があります。以下は、デフォルト設定のままです。
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
マルチサイト用のデフォルトの.htaccessファイルなど、その他の例については、WordPress Codexをご参照ください。
\切り札/wp-config.phpに追記
前項までの対策ではどうにもならず、苦戦していたところで発見したのが、そのやり方は次に説明するwp-config.phpを編集して強制的にSSLを有効化してしまう方法です。
PHPを編集される前にバックアップされることをオススメします。
オススメなプラグイン「All-in-One WP Migration」
まず wp-config.php を開きます。
このファイルは、wp-content、wp-includes、wp-adminと同じ階層にあります。
次に下記のPHPコードを追記します。
/* --------------------------------------------------
HTTPSを正しく有効化
----------------------------------------------------- */
define('FORCE_SSL_ADMIN', true);
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] )
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' )
{
$_SERVER['HTTPS']='on';
}
これを追加して保存すればOK
ただし追加場所は最初だと反映されません。
確実にHTTPS強制を有効化するなら、次の “開発者へ~” の後に追加するのがベストですね。
/**
* 開発者へ: WordPress デバッグモード
*
* この値を true にすると、開発中に注意 (notice) を表示します。
* テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
*/
define('WP_DEBUG', false);
【ここに先ほどのコード追加】
/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */
もし “開発者へ~” のメッセージがない場合は define('WP_DEBUG', false);
の行を探し、その後に追加してもOKです。
今回のまとめ
いろいろ説明してきましたが、手っ取り早い方法は、次のいずれかを試せば高確率で直せます。
- インストール済みプラグインの全無効化
- wp-config.phpでHTTPS強制を正しく有効化
- wp-config.phpにサイト・ホームURL追加
まずはプラグインが原因でないか確認しましょう。
それでダメなら wp-config.php の編集です。
以上、WordPressの管理画面でリダイレクトループの対処法でした。