Introduction

A WordPress redirect loop usually appears as ERR_TOO_MANY_REDIRECTS after an SSL change, domain move, reverse proxy change, or plugin configuration update. The browser keeps bouncing between two URL versions and never reaches a stable page.

Symptoms

  • The browser shows ERR_TOO_MANY_REDIRECTS
  • The issue started after enabling HTTPS or Cloudflare
  • wp-admin and the front end both redirect endlessly
  • Clearing cookies does not solve the problem for all users
  • One URL version such as http or www keeps forcing the other back again

Common Causes

  • WordPress Address and Site Address are set to different URL variants
  • A redirect plugin conflicts with server or proxy redirect rules
  • HTTPS is forced at multiple layers without trusted proxy headers
  • Cloudflare Flexible SSL or another mismatched SSL mode causes loops
  • Hard-coded redirect rules in .htaccess or Nginx conflict with app settings

Step-by-Step Fix

  1. Check the configured site URL values in WordPress settings or wp-config.php and make sure both point to the exact canonical URL you want.
  2. Review .htaccess, Nginx rules, load balancer settings, and CDN settings for duplicate HTTP-to-HTTPS or non-www to www redirects.
  3. If the site sits behind Cloudflare or another proxy, verify the SSL mode matches the origin setup and trusted forwarded headers are available to WordPress.
  4. Temporarily disable redirect, security, or caching plugins that can rewrite requests before WordPress finishes loading.
  5. Clear application, CDN, and browser caches so you are testing the live redirect chain rather than stale responses.
  6. Test the redirect path with a header inspection tool or curl -I so you can see exactly which layer issues each redirect.
  7. Remove the duplicate or conflicting redirect rule rather than stacking more redirects on top of the problem.
  8. Re-test the homepage, a post URL, and wp-admin login to confirm all important routes now settle on one final URL.
  9. Document the canonical hostname and SSL policy so future migrations do not recreate the same loop.