2026年10月2日
2026年10月2日
WordPressで「リダイレクトが多すぎます」エラーを解決する方法
はじめに
「リダイレクトが多すぎます(ERR_TOO_MANY_REDIRECTS)」はブラウザがリダイレクトのループを検出したときに表示されます。HTTPS化の設定ミス・siteurlとhomeのURL不一致・.htaccessの競合が主な原因です。
症状・原因
- サイトにアクセスすると「このページにリダイレクトが繰り返し行われています」と表示される
- HTTP → HTTPS に変更した後から発生するようになった
- 管理画面にもアクセスできない
- ロードバランサー・CDNを導入した後から発生している
解決手順
ステップ1:原因を特定する
# リダイレクトチェーンを確認
curl -I -L --max-redirs 5 https://example.com 2>&1 | grep -E "^(HTTP|Location)"
# wp-config.php の siteurl / home を確認
wp config get siteurl
wp config get home
# DBの siteurl / home を確認
wp option get siteurl
wp option get home
# ブラウザのキャッシュ・Cookieをクリアしてから再確認
# Chrome: Ctrl+Shift+Delete → キャッシュ・Cookieを削除
# その後シークレットモードでアクセス
ステップ2:siteurl と home を正しく設定する
// wp-config.php に直接追記して DB 設定を上書きする
// (管理画面にアクセスできない場合の応急処置)
define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');
# WP-CLI でDB上の値を修正
wp option update siteurl 'https://example.com'
wp option update home 'https://example.com'
# HTTP と HTTPS が混在していないか確認
wp option get siteurl
wp option get home
ステップ3:.htaccess のリダイレクト設定を確認・修正する
# .htaccess の標準的な HTTPS 強制設定
# ロードバランサーがある場合は X-Forwarded-Proto を使う
# ✅ 通常のサーバー(HTTPSを直接処理する場合)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# ✅ ロードバランサー・CDN経由の場合
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# WordPress の標準パーマリンク設定(HTTPS強制の後に追記)
# 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
ステップ4:wp-config.php の SSL 設定を確認する
// wp-config.php: ロードバランサー・プロキシ経由の場合
// ✅ HTTPS を正しく検出するための設定
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
// Cloudflare の場合
if (isset($_SERVER['HTTP_CF_VISITOR'])) {
$visitor = json_decode($_SERVER['HTTP_CF_VISITOR'], true);
if (isset($visitor['scheme']) && $visitor['scheme'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
}
// 管理画面の HTTPS 強制(wp-config.php)
define('FORCE_SSL_ADMIN', true);
ステップ5:プラグインの HTTPS 強制設定を確認する
# Really Simple SSL など HTTPS強制プラグインを一時無効化
wp plugin deactivate really-simple-ssl --skip-plugins
# 全プラグインを一時無効化して原因を切り分ける
wp plugin deactivate --all
# 問題が解消したらプラグインを1つずつ有効化して特定
wp plugin activate plugin-name
// functions.php: HTTPS強制の二重設定を避ける
// ❌ プラグインと functions.php 両方で設定するとループする
// 片方のみ使用すること
// ✅ プラグインを使う場合は functions.php の設定を削除
// ✅ functions.php で設定する場合はプラグインを無効化
注意事項
- ロードバランサーやCDN(CloudFlare・AWS ALBなど)を使っている場合、サーバーから見るとHTTPでも
X-Forwarded-Proto: httpsヘッダーが付くため、.htaccessの%{HTTPS} off条件だけでは正しく判定できません。必ずX-Forwarded-Protoを使った条件に切り替えてください WP_HOMEとWP_SITEURLをwp-config.phpに定義すると、管理画面の「一般設定」でURLが変更できなくなります。応急処置として追記した後、DB上の値を修正してから削除してください
まとめ
リダイレクトループ解決は①curl -ILでリダイレクトチェーンを確認、②wp option get siteurl/homeでURL設定のhttp/https混在をチェック、③.htaccessでHTTPS強制条件をX-Forwarded-Proto対応版に修正、④wp-config.phpで$_SERVER['HTTPS']='on'をプロキシヘッダーから設定、⑤Really Simple SSLなどのHTTPS強制プラグインと.htaccessの二重設定を解消します。