WordPressあれこれ

常時SSL化に失敗してログインできない時の対処法

WPリダイレクトループの原因
WEB先案内

SSL化の手順を間違えてログインできなくなった

先日、お客様より、レンタルサーバーでSSL申請する前に「WordPressアドレス」と「サイトアドレス」を、http:// から https:// に変更してしまいログインできなくなったため、何とかして欲しいというご相談を受けました。

ブラウザでサイトにアクセスしたところ、「ERR_TOO_MANY_REDIRECTS」が表示されておりました。

このエラーは一般的にWordPressサイトの設定変更後、またはサーバー上のリダイレクトの設定ミスを理由に発生します。

いわゆるリダイレクトループというものです。

当初、「WordPressアドレス」と「サイトアドレス」を修正すれば解決すると思っていました。

しかし、うまく行かず試行錯誤することに・・・その過程で新しい発見や学びがあり、備忘のため、まとめておくことにしました。

結論を先に知りたい人はこちら

リダイレクトループ時の対応方法

GoogleでもMozillaでも、「クッキーを消去してみてください」という推進事項がエラーの直下に表示されます。

クッキーには、ERR_TOO_MANY_REDIRECTSエラーの原因となるデータが含まれていることがあります。

この対策は自分のウェブサイトだけでなく、どのウェブサイトでも行うことができます。

クッキーがすべてのウェブサイトの「ログイン」状況またはその他の設定の情報を保持しているため、不具合が発生しているウェブサイトのみでクッキーを消去した方がよいでしょう。

そうすると、頻繁に訪れる他のウェブサイトには影響しません。

Google Chromeで特定のウェブサイトのクッキーを消去するには、下記リンクの手順に従ってください。

特定の Cookie を削除する

WordPressサイト、レンタルサーバーのキャッシュをクリアする

リダイレクトループはキャッシュ可能なレスポンスであるため、WordPressサイト、サーバー、サードパーティプロキシサービス、必要に応じてブラウザのキャッシュをクリアした方がよいでしょう。

WordPressウェブサイトのキャッシュをクリアする

リダイレクトループの種類により、WordPress管理画面にアクセスできる可能性があります。

アクセスできる場合には、キャッシングプラグインの設定画面で簡単にキャッシュをクリアすることができます。

人気プラグインのそれぞれでWordPressのキャッシュをクリアする方法については下記をご参照ください。

レンタルサーバーのキャッシュをクリアする

レンタルサーバーの多くは、WordPressサイトのキャッシュをクリアできる独自のコントロールパネルツールがあります。

WEB先案内ではXサーバーをよく使っているので、参考までにブラウザキャッシュの設定方法をご紹介します。

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分かかることがあります。
SSLテスト
SSLテスト

2. SSLプラグインを使用しないで、ハードコードされたリンクを更新すること

Really Simple SSLなどのHTTPSを自動的にリダイレクトする無料のSSL WordPressプラグインがあります。

ただし、サードパーティプラグインを利用すると、常に課題または互換性問題が生じる可能性があるため、この方法を応急処置としない方がいいです。

一時対策として使用してもいいですが、必ずハードコードされたHTTPリンクを更新する必要があります。

3. サーバー上のHTTPからHTTPSへのリダイレクトを確認する

おそらく、サーバー上のHTTPSリダイレクトルールが誤って構成されている可能性があります。

NginxでHTTPをHTTPSにリダイレクトする

ウェブサーバーがNginxを使用している場合、Nginxの設定ファイルに次のコードを追加することにより、すべてのHTTPトラフィックをHTTPSに簡単にリダイレクトできます。

Nginxで動作するWordPressをリダイレクトするために推奨される方法です。
1server {
2    listen 80;
3    server_name domain.com www.domain.com;
4    return 301 https: //domain.com$request_uri; 
5}

ApacheでHTTPをHTTPSにリダイレクトする

WebサーバーがApacheを使用している場合、.htaccessファイルに次のコードを追加することにより、すべてのHTTPトラフィックをHTTPSに簡単にリダイレクトできます。

Apacheで動作するWordPressをリダイレクトするために推奨される方法です。
1RewriteEngine On
2RewriteCond %{HTTPS} off
3RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

WordPressウェブサイトの設定を確認する

次に、WordPressウェブサイトの一般設定を確認します。

間違ったドメインを指しておらず、不一致がないかを検証するのに、2つの項目を確認する必要があります。

ウェブサイトに適切な(wwwまたは非www)プレフィックスを使用していないことはよくある不具合原因です。

ユーザーがホストまたはドメインを切り替えて、本項目が変更した認識がないことがあります。

「WordPressアドレス(URL)」:ブログへのアクセスができるアドレス
「サイトアドレス(URL)」: WordPressのコアファイルへのアクセスができるアドレス
WordPressの独特なディレクトリを与えていない限り、上記の2つが一致するはずです。
WordPressアドレス
WordPressアドレス
ただし、エラー時にはWordPressのダッシュボードにアクセスできない可能性があります。

そこで、wp-config.phpに値を入力し、上記の設定を上書きすることができます。

wp-config.phpは通常WordPressウェブサイトのルートにあり、FTP、SSH、WP-CLI経由でアクセスできます。

WP_HOMEとWP_SITEURLをハードコーディングするには、次のコードを入力し、正しいドメインを反映するように値を変更します。
1define('WP_HOME','https://yourdomain.com');
2define('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」というようにバックアップした年月日を追記すると運用が効率化されると思います。
.htaccessファイルの名前を変更する
.htaccessファイルの名前を変更する
通常、このファイルを再作成するには、WordPressのパーマリンクを再保存するだけです。

ただし、ERR_TOO_MANY_REDIRECTSエラーが発生したときにはWordPressのダッシュボードにアクセスできない為、上記ができません。

したがって、新しい.htaccessファイルを作成し、次の内容を入力し、サーバーにアップロードする必要があります。以下は、デフォルト設定のままです。
1# BEGIN WordPress
2
3RewriteEngine On
4RewriteBase /
5RewriteRule ^index\.php$ - [L]
6RewriteCond %{REQUEST_FILENAME} !-f
7RewriteCond %{REQUEST_FILENAME} !-d
8RewriteRule . /index.php [L]
9
10# END WordPress
マルチサイト用のデフォルトの.htaccessファイルなど、その他の例については、WordPress サポートをご参照ください。

\切り札/wp-config.phpに追記

前項までの対策ではどうにもならず、苦戦していたところで発見したのが、そのやり方は次に説明するwp-config.phpを編集して強制的にSSLを有効化してしまう方法です。

PHPを編集される前にバックアップされることをオススメします。

オススメなプラグイン「All-in-One WP Migration」

まず wp-config.php を開きます。

このファイルは、wp-content、wp-includes、wp-adminと同じ階層にあります。

次に下記のPHPコードを追記します。
1/* --------------------------------------------------
2	HTTPSを正しく有効化
3----------------------------------------------------- */
4define('FORCE_SSL_ADMIN', true);
5if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) 
6     && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) 
7{
8    $_SERVER['HTTPS']='on';
9}
これを追加して保存すればOK

ただし追加場所は最初だと反映されません。

確実にHTTPS強制を有効化するなら、次の “開発者へ~” の後に追加するのがベストですね。
1/**
2 * 開発者へ: WordPress デバッグモード
3 *
4 * この値を true にすると、開発中に注意 (notice) を表示します。
5 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
6 */
7define('WP_DEBUG', false);
8
9【ここに先ほどのコード追加】 
10
11/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */
もし “開発者へ~” のメッセージがない場合は define('WP_DEBUG', false); の行を探し、その後に追加してもOKです。

今回のまとめ

いろいろ説明してきましたが、手っ取り早い方法は、次のいずれかを試せば高確率で直せます。
もし管理画面でリダイレクトループが発生したら…
  • インストール済みプラグインの全無効化
  • wp-config.phpでHTTPS強制を正しく有効化
  • wp-config.phpにサイト・ホームURL追加
まずはプラグインが原因でないか確認しましょう。

それでダメなら wp-config.php の編集です。

以上、WordPressの管理画面でリダイレクトループの対処法でした。
ABOUT ME
WEBさん
WEBさん
WordPressの不具合をなおす人
あなたのお仕事をする時間を使ってITに関することを調べたり、トライしてみたりして、それでもうまくいかない。そんなことはありませんか? WEB先案内をご利用いただくと、困ったときにITの顧問としてあなたのITに関するお悩みにお答えし、サポートを行うことができます。
記事URLをコピーしました