2026年9月15日
2026年9月15日
WordPressのwp-adminでリダイレクトループが発生する原因と修正方法
/wp-admin/ を開くと「リダイレクトが繰り返し行われました」(ERR_TOO_MANY_REDIRECTS)と表示される、またはログインしてもログイン画面に戻され続ける場合、原因の多くは「サイトのURL設定とHTTPSの判定のずれ」か「ログインCookieが正しく扱われていないこと」です。この記事では、ブラウザの開発者ツールでリダイレクトの流れを確認して原因を見分け、wp-config.php やWP-CLIで直す手順を解説します。
リダイレクトループが起きる仕組み
リダイレクトループは、AというURLがBへ転送し、BがまたAへ転送する、という往復が続く状態です。ブラウザは一定回数を超えると読み込みを止め、エラーを表示します。管理画面で起きやすいのは、/wp-admin/ にはWordPress自身の転送処理が多く関わっているためです。
- ログインしていない、またはログインCookieが無効と判断されると、
wp-login.phpに転送されます。 FORCE_SSL_ADMINが有効で、WordPressが「今の接続はHTTPSではない」と判断すると、HTTPSのURLに転送されます。- 「設定」→「一般」の「WordPressアドレス(URL)」と実際のアクセス先が違うと、設定されたURLに転送されることがあります。
これらがサーバーの転送設定(.htaccess やNginxの return 301)、CDN、プラグインの転送処理とかみ合わないと、往復が止まらなくなります。
まずリダイレクトの流れを確認する
原因を推測で探すより、転送の流れを実際に見るほうが早く解決できます。
ブラウザの開発者ツールで確認する
- 開発者ツールを開き、「ネットワーク」タブを選びます。
- 「ログを保持」(Preserve log)にチェックを入れます。これがないとページの移動のたびに記録が消えます。
/wp-admin/にアクセスし、記録された行を上から順に選んで、ステータスコード(301・302など)とレスポンスヘッダーのLocation(転送先)を確認します。
curlで確認する
SSHが使える環境やローカルのターミナルからは、次のコマンドで転送の流れをまとめて表示できます。
curl -sIL --max-redirs 10 https://example.com/wp-admin/ | grep -iE '^(HTTP|location)'
流れのパターンから原因を見分ける
転送先の並びには、原因ごとに特徴があります。
- **
http://とhttps://を往復している**:HTTPSの判定のずれです。CDNやロードバランサーの後ろでよく起きます。 - **
wwwありとなしを往復している**:WordPressのURL設定とサーバーの転送設定が逆になっています。 - **
/wp-admin/とwp-login.phpを往復している**:ログインCookieの問題です。転送先のURLにreauth=1が付いていることが多いです。 - 独自のログインURLや別のパスが混ざっている:ログインURLを変更するプラグインやセキュリティ系プラグインが関係しています。
作業前の準備
この後の作業では wp-config.php やデータベースの設定値を変更します。始める前にファイルとデータベースのバックアップを取ってください。管理画面に入れない状態で作業するため、FTPまたはファイルマネージャー、可能ならSSHとWP-CLIを使える状態にしておくと進めやすくなります。
原因別の修正方法
URL設定のずれ(http/https、wwwの有無)
データベースに保存されているサイトのURLを確認します。WP-CLIでは次のコマンドで確認と修正ができます。
# 現在の設定を確認
wp option get home
wp option get siteurl
# 実際に使うURLに合わせて修正(例)
wp option update home 'https://example.com'
wp option update siteurl 'https://example.com'
WordPressを /wp/ などのサブディレクトリに置いている場合、siteurl はそのディレクトリを含むURLになります。両方を同じ値にしてよいとは限らないため、元の値を控えてから変更してください。
WP-CLIが使えない場合は、wp-config.php に次の定数を書くと、データベースの設定より優先されます。
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );
この定数を書いている間は、「設定」→「一般」のURL欄が変更できない表示になります。管理画面に入れるようになったら、データベースの値を正しく直したうえで定数を外すか、そのまま管理する方針を決めておくと、後で混乱しません。
サーバー側で www ありに統一する転送を入れているなら、WordPressのURLも www ありにそろえます。逆も同様です。
CDN・ロードバランサー経由でHTTPSが正しく判定されない
CDNやロードバランサーでHTTPSの通信を受け、WordPressのサーバーへはHTTPで中継している構成では、WordPressは「HTTPでアクセスされた」と判断します。この状態で FORCE_SSL_ADMIN やHTTPSへの転送が働くと、HTTPSに転送しても中継先ではまたHTTPに見えるため、往復が止まりません。
中継する側が元の通信の種類を X-Forwarded-Proto ヘッダーで伝えている場合は、wp-config.php の require_once ABSPATH . 'wp-settings.php'; より上に次のコードを追記します。
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
$_SERVER['HTTPS'] = 'on';
}
このヘッダーは送信元が自由に付けられるため、自分の管理するCDNやロードバランサーを経由する構成でのみ使ってください。また、CDNの設定で「訪問者とCDNの間はHTTPS、CDNとサーバーの間はHTTP」とする方式(CloudflareのFlexibleモードなど)を使っていて、サーバー側でもHTTPSへの転送をしていると、同じ往復が起きます。この場合はサーバーにもSSL証明書を入れ、CDNからサーバーへの通信もHTTPSにする設定へ切り替えるのが根本的な解決です。
ログインCookieの問題
/wp-admin/ と wp-login.php を往復する場合は、ログイン時に発行されるCookieが、次のアクセスで受け取られていません。次の点を確認します。
- ブラウザのCookieとキャッシュ:まずそのサイトのCookieを削除するか、シークレットウィンドウでログインを試します。古いCookieが残っているだけなら、これで直ります。
- **
COOKIE_DOMAINの設定**:wp-config.phpでCOOKIE_DOMAINを指定している場合、実際のドメインと一致しているかを確認します。不要であれば行を削除してWordPressの既定の動作に戻します。 - URL設定のずれ:
homeとsiteurlのドメインが違うと、Cookieが別のドメイン向けに発行されることがあります。前述の手順で設定をそろえてください。 - キャッシュ:ページキャッシュやCDNが、ログイン画面や管理画面の転送結果を保存していると、ログイン後も古い転送が返ります。
wp-login.phpと/wp-admin/をキャッシュの対象から外し、キャッシュを削除します。
プラグインやサーバー設定の転送が重なっている
SSL化を補助するプラグイン、ログインURLを変更するプラグイン、セキュリティ系プラグインは、それぞれ独自に転送を行います。サーバーの .htaccess にもHTTPSへの転送を書いていると、二重の転送が衝突することがあります。
管理画面に入れない状態でプラグインを切り分けるには、FTPで wp-content/plugins フォルダの名前を一時的に変える方法と、WP-CLIを使う方法があります。
# すべてのプラグインを一時的に無効化する
wp plugin deactivate --all
# 管理画面に入れたら、1つずつ有効にして原因を探す
wp plugin activate プラグインのスラッグ
--all で無効化すると、どれが有効だったか分からなくなります。事前に wp plugin list --status=active で一覧を控えておいてください。原因のプラグインが見つかったら、その設定で転送をオフにするか、サーバー側の転送設定との重複をなくします。Apacheの .htaccess を編集する場合は、# BEGIN WordPress から # END WordPress の間はWordPressが書き換える領域なので、独自の転送はその外に書きます。
直った後の確認
修正後は、シークレットウィンドウでトップページ、/wp-admin/、ログインとログアウトを順に試し、curl でも転送が1〜2回で終わることを確認します。サイト全体のURLを http から https に変えた場合は、記事内の画像やリンクに古いURLが残っていないかも確認してください。データベース内のURLを一括で置き換えるときは、wp search-replace を --dry-run 付きで実行して影響範囲を確かめてから本番の置き換えを行うと安全です。ブラウザやCDNの画面表記は変わることがあるため、本記事の説明は執筆時点のものです(2026年10月現在)。
まとめ
- wp-adminのリダイレクトループは、URL設定とHTTPS判定のずれ、ログインCookieの問題、転送設定の重複のいずれかで起きることが大半です。
- 開発者ツールの「ネットワーク」タブ(ログを保持を有効にする)や
curl -sILで転送の流れを見ると、原因を絞り込めます。 - URLのずれは
wp option updateかWP_HOME・WP_SITEURLで直し、CDN経由のHTTPS判定はX-Forwarded-Protoを見る設定かCDN側の設定で直します。 - Cookieの問題は、ブラウザのCookie削除、
COOKIE_DOMAINの見直し、ログイン画面をキャッシュの対象から外すことで解決できます。 - 作業前にはバックアップを取り、プラグインの切り分けでは有効だった一覧を控えておきます。