WordPressの/wp-login.phpと/wp-adminでERR_TOO_MANY_REDIRECTSを修正する

intermediate📝 WordPress2026-03-24| WordPress 5.x–6.x、Apache/Nginx、PHP 7.4–8.3、共有ホスティングまたはVPS(Linux/Ubuntu/CentOS)

Error Message

ERR_TOO_MANY_REDIRECTS — This page isn't redirecting properly when accessing /wp-login.php or /wp-admin
#wordpress#wp-admin#リダイレクトループ#cookies#siteurl

状況

夜中の2時。誰かがサイトをHTTPSに切り替えたか、ドメインを変更したか、.htaccessのルールを触ったばかりです。今や/wp-login.php/wp-adminへのアクセスは毎回同じ結果になります:

ERR_TOO_MANY_REDIRECTS — This page isn't redirecting properly when accessing /wp-login.php or /wp-admin

ブラウザは20回以上のリダイレクトリクエストを送り、ループを検出して終了します。あなたはロックアウトされています。一般訪問者への影響はループがどこで始まるかによって異なります。最速から最終手段まで、順を追って修正方法を確認していきましょう。

なぜこれが起きるのか

データベース内のsiteurlhomeが実際にサーバーが配信しているURLと一致しない場合、WordPressはリダイレクトします。この不一致がWordPressが抜け出せないフィードバックループを生み出します。

最も一般的なトリガー:

  • wp-config.phpやデータベースを更新せずにHTTP → HTTPSに移行した
  • ドメイン名を変更したが設定の更新が部分的だった
  • wp-config.phpにハードコードされたWP_SITEURLまたはWP_HOME定数が間違っている
  • キャッシュプラグインまたはCDN(Cloudflare、Nginx FastCGI)がログインリダイレクトを横取りしている
  • サーバーが拒否する古いWordPress認証クッキー — 再認証のためにリダイレクトし続け、クッキーが再び拒否され、その繰り返し
  • リバースプロキシがHTTPSヘッダーを除去しているため、ブラウザがすでにHTTPS上にいるにもかかわらず、WordPressがリクエストをプレーンHTTPとして認識する

クイック修正:wp-config.phpでsiteurlとhomeを上書きする

これが最も速いテストです。wp-config.phpを開き、/* That's all, stop editing! */コメントのに次の2行を追加します:

define('WP_HOME', 'https://yourdomain.com');
define('WP_SITEURL', 'https://yourdomain.com');

これらの定数はデータベースに保存されている値より優先されます。/wp-login.phpをリロードしてください — ループが止まれば、データベースに誤ったURLがあるのが根本原因です。

ログインできたら、設定 → 一般に移動してWordPressアドレスサイトアドレスの両方が正しいことを確認します。その後、データベースを正規の情報源として維持したい場合は、wp-config.phpからハードコードされた定数を削除できます。

データベースを直接修正する(wp-config.phpの上書きが効かない場合)

phpMyAdminで接続するか、MySQLに直接入ります:

mysql -u db_user -p db_name

実際に保存されている内容を確認します:

SELECT option_name, option_value
FROM wp_options
WHERE option_name IN ('siteurl', 'home');

HTTPからHTTPSに移行した場合、http://yourdomain.comがまだ残っているでしょう。修正します:

UPDATE wp_options SET option_value = 'https://yourdomain.com' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'https://yourdomain.com' WHERE option_name = 'home';

phpMyAdminにアクセスできないがWP-CLIがインストールされている場合、2つのコマンドで同じことができます:

wp option update siteurl 'https://yourdomain.com'
wp option update home 'https://yourdomain.com'

クッキーとブラウザキャッシュをクリアする

サーバー側の修正を深く掘り下げる前に、古いクッキーを除外しましょう。クッキーは人々が思うよりも多くのリダイレクトループの原因になっています。

  • シークレット/プライベートウィンドウを開いて/wp-login.phpに直接アクセスしてみる
  • またはドメインのクッキーを削除する:DevTools → Application → Cookies → 右クリック → Clear
  • 健全性チェックとして、まったく別のブラウザを試してみる

新しいブラウザでログインページが正常に読み込まれた場合、クッキーが原因でした。サーバーの変更は不要です — クリーンなセッションからログインするだけです。

.htaccessを修正する(Apache)

.htaccess内の1つの不正なリダイレクトルールでループが発生するには十分です。最も素早い確認方法:一時的にファイルを退避させます。

mv /var/www/html/.htaccess /var/www/html/.htaccess.bak

/wp-login.phpを再度試してみてください。ログインできた場合、.htaccessに不正なルールがありました。設定 → パーマリンク → 変更を保存からWordPressのデフォルト版を再生成するか、手動でこれを貼り付けます:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

リバースプロキシ背後のHTTPS修正(Nginx + Apacheスタック)

ロードバランサーまたはNginxリバースプロキシの背後でWordPressを実行していますか?PHPプロセスはブラウザがHTTPS上にいるにもかかわらずHTTPを見ている可能性が高いです。WordPressはHTTPSにリダイレクトします。NginxはリクエストをHTTPとしてプロキシします。WordPressは再びリダイレクトします。ブラウザが諦めるまで(通常20ホップ後)ループが続きます。

wp-config.phpにこれを追加します:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

次に、Nginxの設定が実際にヘッダーを転送していることを確認します:

proxy_set_header X-Forwarded-Proto $scheme;

設定をテストしてリロードします:

sudo nginx -t && sudo systemctl reload nginx

Cloudflare SSLループの修正

CloudflareのSSLフレキシブルモードは、CDN移行後のWordPressリダイレクトループの最も一般的な原因の一つです。仕組みはこうです:フレキシブルモードはCloudflareがオリジンサーバーにプレーンHTTPで通信するよう指示します。WordPressはHTTPを検出して即座にHTTPSにリダイレクトします。CloudflareはそれをHTTPとしてプロキシします。WordPressは再びリダイレクトします。サイトは永遠に読み込まれません。

Cloudflareダッシュボード → SSL/TLSに移動し、モードをフルまたは**フル(厳格)**に切り替えます。数秒以内にループが止まります — キャッシュのパージは不要です。

ファイルシステム経由で全プラグインを無効化する(最終手段)

リダイレクトプラグイン、ログインセキュリティツール、一部のキャッシュプラグインがすべてこのループを引き起こす可能性があります。ダッシュボードに入れない場合は、ファイルシステムから無効化します:

mv /var/www/html/wp-content/plugins /var/www/html/wp-content/plugins.bak

/wp-login.phpを試してください。読み込まれた場合、プラグインが原因です。フォルダを元に戻します:

mv /var/www/html/wp-content/plugins.bak /var/www/html/wp-content/plugins

ダッシュボードからプラグインを1つずつ再有効化します。問題のあるプラグインを有効にした時にループが再発します — それがターゲットです。

修正が機能したことを確認する

  • シークレットウィンドウでhttps://yourdomain.com/wp-login.phpを開く — リダイレクトなしでログインフォームが表示されるはず
  • DevTools → Networkを確認:/wp-login.phpのレスポンスは301302の連鎖ではなく200 OKであるべき
  • ログインして管理ダッシュボードが正常に読み込まれることを確認する
  • wp option get siteurl && wp option get homeを実行して両方のデータベース値が正しいことを確認する

Related Error Notes