The short answer: ERR_TOO_MANY_REDIRECTS means URL A forwards to URL B, and URL B forwards back to URL A. In 90% of cases, this is caused by Cloudflare SSL set to 'Flexible' while your origin server forces HTTPS, or conflicting WWW vs. non-WWW rewrite rules in your .htaccess.
What Triggers ERR_TOO_MANY_REDIRECTS?
Web browsers have a hard safety cap of around 20 redirects before they refuse to follow further instructions and display this error screen. An infinite loop occurs when server logic creates circular routing instructions:
GET https://example.com/login → 302 to https://example.com/dashboard
GET https://example.com/dashboard → 302 to https://example.com/login (session expired)
... repeated 20 times until browser aborts.
The #1 Culprit: Cloudflare Flexible SSL
If your website uses Cloudflare CDN, this is by far the most frequent source of redirect loops:
- In Cloudflare: Your SSL encryption mode is set to Flexible. This tells Cloudflare to talk to visitors via HTTPS, but talk to your origin web server over unencrypted plain HTTP (Port 80).
- On Your Origin Web Server: Your Nginx, Apache, or WordPress installation has a rule that says "Redirect all HTTP traffic to HTTPS!"
1. Visitor requests
https://yoursite.com.2. Cloudflare receives HTTPS request, but contacts your origin via
http://yoursite.com.3. Origin sees HTTP and returns a 301 redirect: "Go to https://yoursite.com!"
4. Cloudflare receives the 301, passes it back to the browser, and the process repeats endlessly.
The Fix: Go to Cloudflare Dashboard → SSL/TLS → change encryption mode from Flexible to Full (Strict).
Conflicting .htaccess and Nginx Rewrite Rules
Another classic cause is fighting canonical rules. For example, your WordPress Site URL is set to https://example.com, but your Apache .htaccess file contains:
# INCORRECT: Forces www on a site configured without www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
Apache forces WWW, and WordPress immediately forces non-WWW. The two systems battle until the browser gives up. Ensure your CMS base URL and web server configuration agree 100% on hostname and protocol.
Why Does Clearing Browser Cache Sometimes Fix It?
HTTP 301 redirects are cached permanently by modern web browsers like Chrome and Safari. If you accidentally introduced a bad redirect rule on your server earlier today and later fixed it, your browser might still be executing the old cached redirect locally without ever pinging the server!
Always test redirect issues in a fresh Incognito / Private Window or use an independent web checker to bypass local browser cache.