WordPressをHTTPSへ移行した後にリダイレクトが多すぎる場合

結論
HTTPSへ移行した後にWordPressで「リダイレクトが多すぎます」エラーが発生する場合、通常はWordPress、Webサーバー、セキュリティプラグイン、リバースプロキシのいずれかが、リクエストが安全な接続かどうかについて異なる認識を持っています。WordPressの両方のURL設定がHTTPSになっていることを確認し、該当する場合は信頼できるプロキシ検出を設定して、HTTPからHTTPSへのリダイレクトを意図した1か所だけにします。関連するキャッシュを削除し、変更は1つずつ管理しながら、その都度リダイレクトチェーンを確認してください。
要点
- WordPress Address (URL) と Site Address (URL) の両方を、最終的なHTTPSオリジンと同じ値に設定します。
- CDNまたはリバースプロキシがTLSを終端する場合、オリジンが正確な転送プロトコル情報を受け取っていることを確認します。
- プラグイン、
wp-config.php、.htaccess、Nginx、ホスティング設定、プロキシルールでHTTPS強制が重複しないようにします。 - ハードコードされた
http://コンテンツは、通常、リダイレクトループそのものではなく、混在コンテンツの警告を引き起こします。 - 設定を修正した後、ブラウザー、WordPress、ホスティング、CDNのキャッシュを削除します。
Site Administrator
このエラーの意味と見分け方
- HTTPS移行前はHTTPで正常に動作していたサイトに、「リダイレクトが多すぎます」と表示される。
- ブラウザーがHTTPとHTTPSを繰り返し切り替える、または同じHTTPSアドレスを何度もリクエストする。
- サイト全体が利用できなくなる場合もあれば、
/wp-admin、ログインページ、特定のパスだけがループする場合もある。 - HTTPアドレスを開くと、期待されるHTTPSへのリダイレクトが1回発生した後、通常のレスポンスではなくリダイレクトが繰り返される。
- キャッシュされたリダイレクト、Cookie、サイトデータの違いにより、プライベートブラウジングや別のデバイスでは挙動が異なる場合がある。
可能性の高い順の主な原因
- WordPressのURL設定がHTTPのままになっている。 WordPress Address (URL) または Site Address (URL) のいずれかがHTTPのままで、別のレイヤーがHTTPSを要求していると、WordPressがサーバーのポリシーと競合するスキームへリダイレクトすることがあります。
- 複数のレイヤーでHTTPSが強制されている。 セキュリティプラグイン、
wp-config.phpのロジック、.htaccessまたはNginxのルール、ホスティング設定、プロキシルールが重複したり、リクエストのスキームについて異なる前提を持ったりすることがあります。 - CDNまたはリバースプロキシがTLSを終端している。 訪問者はHTTPSで接続していても、オリジンへの接続はHTTPになる場合があります。元のプロトコルが欠落している、正しくない、または安全に信頼できない場合、WordPressがリクエストを安全でないものと繰り返し判断することがあります。
- プラグインまたはテーマが特定のパスをリダイレクトしている。 ログイン、管理画面、正規URL、セキュリティ、会員制サイト用のプラグインが、
/wp-login.php、/wp-admin、または特定のページだけに影響することがあります。 - 古いキャッシュ済みリダイレクトまたはブラウザーCookieが修正を隠している。 これが元の原因である可能性は低いものの、修正済みの設定が壊れたままに見えることがあります。
- 古いHTTP参照がコンテンツや設定に残っている。 これらは通常、混在コンテンツの警告または追加のリダイレクトを引き起こしますが、サイト全体のリダイレクトループの原因にはなりません。まず主要なチェーンを修正した後で調査してください。
修正方法
1. リダイレクトチェーンを確認する
最初の確認にはプライベートブラウジングウィンドウを使用します。シェルにアクセスできる場合は、影響を受けているサイトの実際のHTTPSアドレスをシェル変数に設定し、次の読み取り専用リクエストを実行します。
SITE_URL='the actual HTTPS site address'
curl -IL "$SITE_URL"すべてのステータスコードとLocation:ヘッダーを記録します。HTTPとHTTPSが交互に現れる場合は、スキーム検出またはリダイレクトルールの競合が通常の原因です。同じHTTPSアドレスが繰り返される場合は、正規URL、プラグイン、プロキシ、またはキャッシュされたリダイレクトの可能性が高くなります。認証情報、Cookie、認証ヘッダーは含めないでください。
2. WordPressの両方のURL設定を確認する
ダッシュボードを利用できる場合は、Settings → Generalを開き、WordPress Address (URL) と Site Address (URL) が、必要なサブディレクトリを含め、意図した同じHTTPSオリジンを使用していることを確認します。
ループによってダッシュボードにアクセスできない場合、SFTPまたはデータベースにアクセスできる承認済みの管理者は、wp-config.phpに一時的に次の値を定義できます。
define( 'WP_HOME', 'the actual canonical HTTPS address' );
define( 'WP_SITEURL', 'the actual canonical HTTPS address' );まずファイルをバックアップし、管理された変更を1つだけ行います。これらの定数を定義している間は、対応するダッシュボードの項目よりも優先されるため、テスト後は意図を明確にして削除または管理してください。
3. TLSの終端場所を特定する
ブラウザーがWebサーバーへ直接接続しているのか、CDN、ロードバランサー、リバースプロキシを経由しているのかを確認します。プロキシがTLSを終端する場合、訪問者がHTTPSを使用していても、オリジンはHTTP接続を受け取る可能性があります。
元のプロトコルが一貫して転送され、意図した信頼済みプロキシからのものだけをWordPressが認識するよう設定されていることを、ホスティングまたはプロキシの管理者に確認してください。不特定のクライアントから送信されたX-Forwarded-Protoを無条件に信頼しないでください。検証されていない転送ヘッダーはセキュリティ上の問題を引き起こす可能性があります。
4. HTTPS強制を意図した1つのレイヤーに絞る
HTTPからHTTPSへリダイレクトする可能性があるすべての場所を一覧にします。
- CDNまたはロードバランサーのルール
- ホスティングパネルのSSL設定
- Apacheの
.htaccessまたはNginx設定 - セキュリティまたはSSLプラグイン
- カスタムの
wp-config.phpまたはテーマコード
ホスティング構成に適したレイヤー(一般的にはエッジまたはWebサーバー)に強制処理を残し、競合するアプリケーションレベルのリダイレクトを無効にします。サーバールールを変更する前に設定をバックアップし、管理者の承認を得てください。承認済みのリロードまたは再起動を行う前に設定を検証します。最初の診断手順として、本番Webサーバーを再起動しないでください。
5. ログインと管理画面のパスを個別にテストする
フロントエンドは動作するのに/wp-adminまたはログインだけがループする場合は、承認されたメンテナンス手順に従って、最近変更したセキュリティ、ログイン、正規URL、キャッシュの各プラグインを確認します。1つのパスだけがループする場合は、プラグインの競合である可能性が高くなります。テストのためにプラグインを無効にする場合は、変更を記録し、アクセス制御を維持したうえで、テスト後に再有効化または置き換えを行います。
6. キャッシュを削除して再テストする
元の挙動を記録し、管理された修正を行った後、ブラウザーのサイトデータを削除し、WordPressのページキャッシュまたはオブジェクトキャッシュに加えて、ホスティングとCDNのキャッシュを削除します。HTTPアドレス、HTTPSのホームページ、ログインページ、代表的な内部ページを再テストします。キャッシュされた301または302は、実際の設定を修正した後も残ることがあります。
7. 残っているHTTP参照を更新する
リダイレクトチェーンを修正した後、保存されているURLを変更する前にデータベースをバックアップします。信頼できるWordPress移行ツールまたはWP-CLIのsearch-and-replaceを、まずdry runで実行し、シリアライズされたWordPressデータを処理できるツールを使用します。古いサイトオリジンだけをHTTPSオリジンに置き換えます。すべてのhttp://値を無差別に置換しないでください。サードパーティーのURLや意図的に外部で使用しているリソースは、そのサイトに属していない可能性があります。
予防と修正確認
- サイトの正規HTTPSオリジンを記録し、移行時にWordPressの両方のURL設定を更新します。
- HTTPからHTTPSへのリダイレクトを設定する場所を1つ決めて文書化し、force-SSLプラグインを有効にする前に他のレイヤーを確認します。
- CDNまたはリバースプロキシがTLSを終端するかどうか、またオリジンが元のプロトコルをどのように認識するかを文書化します。
- HTTPS設定を変更するたびに、ホームページ、内部ページ、ログイン、ダッシュボードをテストします。
wp-config.php、rewriteルール、保存されているURLを編集する前に、設定とデータベースをバックアップします。- リダイレクトが動作したら、対象を絞ったHTTPS URL移行を実行し、混在コンテンツの参照を確認します。
外部の助けが必要なタイミング
各Location:ヘッダーをどのレイヤーが返しているか判断できない場合、オリジンとエッジが異なるスキームを報告する場合、またはrewriteルールの変更が他のサイトに影響する可能性がある場合は、ホスティングプロバイダーまたはCDN/ロードバランサーの管理者に連絡してください。サーバー設定、WordPressのURL設定、プロキシ検出が正しいのにプラグインが管理するパスだけがループする場合は、プラグイン開発者に連絡してください。ホスト名、影響を受けるパス、おおよそのテスト時刻、編集済みのリダイレクトチェーンを共有し、事前にCookie、認証ヘッダー、その他の機密情報を削除してください。
よくある質問
WordPressのURL設定が正しくないとHTTPSリダイレクトループが発生しますか?
はい。WordPress AddressまたはSite AddressのいずれかがHTTPのままで、別のレイヤーがHTTPSを要求していると、WordPressとサーバーが正規スキームについて異なる判断をすることがあります。必要なサブディレクトリを含め、両方を意図したHTTPSオリジンに設定してください。
CDNまたはリバースプロキシの背後でWordPressが永久にリダイレクトするのはなぜですか?
CDNは訪問者にはHTTPSで配信しながら、オリジンにはHTTPで接続している可能性があります。元のプロトコルが転送されていないか、WordPressが信頼できる転送値を安全に認識できない場合、WordPressはリクエストを安全でないものとして扱い続けることがあります。
プラグイン以外のHTTPSリダイレクトをすべて無効にすべきですか?
必ずしもそうではありません。適切な強制レイヤーはホスティング構成によって異なります。意図したトラフィックを処理できる1つの明確なレイヤーを選び、別のリダイレクトを無条件に有効にするのではなく、競合するルールを削除または無効にしてください。
投稿内の古いHTTPリンクが「リダイレクトが多すぎます」の原因になることはありますか?
通常はありません。古い内部リンクは、通常、1回のHTTPからHTTPSへのリダイレクトまたは混在コンテンツの警告を引き起こします。リンクは更新すべきですが、サイト自体がループしている場合は、まず実際のレスポンスチェーンを確認してください。
wp-adminまたはログインページだけがリダイレクトするのはなぜですか?
セキュリティ、ログイン、正規URL、または管理画面HTTPS用のプラグインが、パス固有のルールを適用している可能性があります。最近変更したプラグインと管理画面のHTTPS設定を確認し、同時にプロキシのスキーム検出とCookieも確認してください。
キャッシュを削除すればリダイレクトループは解決しますか?
古いキャッシュ済みの301または302を削除できる場合はありますが、実際の設定競合は解決できません。管理された修正を行った後にキャッシュを削除し、レスポンスヘッダーをもう一度確認してください。
関連ドキュメント
実装の詳細については、WP_HOME、WP_SITEURL、HTTPS検出を扱うWordPressのドキュメント、使用中のWebサーバーのrewriteルールに関するドキュメント、転送プロトコルの処理に関するCDNまたはリバースプロキシのドキュメント、さらに関係するSSL、セキュリティ、ログイン、キャッシュプラグインのドキュメントを参照してください。リダイレクトの挙動は直接オリジンのHTTPSとプロキシ経由のHTTPSで異なるため、実際のホスティングスタックに合った情報を使用してください。