ERR_TOO_MANY_REDIRECTS
This error means a page sent your browser into a redirect loop, bouncing between addresses until the browser gave up. It is almost always a problem with the website's configuration, not your device.
Updated June 2026 · 6 min read
-
Written by
Andrian Valeanu
Founder of Pulsetic
Andrian Valeanu founded Pulsetic and, before it, Designmodo. Across 15-plus years he has shipped web products, design tools, and monitoring software teams around the world rely on.
-
Reviewed by
Ionut Caval
Technical reviewer
Ionut Caval reviews Pulsetic's technical guides for accuracy. He works hands-on with web servers, networking, and uptime monitoring day to day, and makes sure the causes and fixes here hold up in production.
The short version: ERR_TOO_MANY_REDIRECTS means your browser is caught in a redirect loop: one address sends it to another, the second sends it back, and round it goes until the browser gives up. The cause is almost always the website's own configuration. The usual suspect is a Cloudflare "Flexible" SSL setting clashing with an origin HTTPS redirect, though mismatched website URLs and conflicting redirect rules do it too.
Key takeaways
- ERR_TOO_MANY_REDIRECTS shows up when a page keeps handing the browser off to another address, on and on, until the browser hits its redirect ceiling and refuses to go further.
- The fault sits in the website's configuration nearly every time. Usually that means a Cloudflare
FlexibleSSL mode at war with an origin HTTPS redirect, www and non-www rules that disagree, or rewrite rules that duplicate each other. - Chrome and Firefox stop at roughly 20 redirects, Safari at about 16.
curl -ILruns into the same wall and quits with exit code 47, and it is the quickest way to watch the addresses chase each other. - There is not much a visitor can do beyond clearing that website's cookies or trying an incognito window. When it loops everywhere, the fix belongs to the website owner.
- Browsers cache permanent redirects (301, 308) hard, so a broken one keeps looping after the fix lands until you clear the caches. Temporary ones (302, 307) tend to sort themselves out.
- Error type
- Browser redirect-loop error
- Whose side
- Almost always the website
- Fix difficulty
- Moderate (website owner)
- Common cause
- Flexible SSL or conflicting redirects
What does ERR_TOO_MANY_REDIRECTS mean?
A redirect is the browser being told that the page it asked for now lives at a different address. ERR_TOO_MANY_REDIRECTS is what you get when those instructions form a loop: address A points to B, and B points back to A. The browser follows the chain a fixed number of times, and once it crosses that limit it stops and shows the error rather than loop forever. The wording shifts from browser to browser, "redirected you too many times" in Chrome, "the page isn't redirecting properly" in Firefox, but the cause underneath is identical.
This lands on the website almost every time, not on you. The loop comes from how the website, or its hosting and CDN, handle redirects, so as a visitor there is rarely much to do beyond clearing local data. Run the website yourself and the fix is yours: somewhere in the redirect rules, the SSL or proxy settings, or the application configuration. The steps below split along those lines so you can jump straight to the part that fits you.
- Full (strict)
- Correct Cloudflare SSL mode
- 1
- HTTPS redirect rule to keep
- 301 / 302
- Redirect codes that loop
How the ERR_TOO_MANY_REDIRECTS error appears
The wording changes depending on your browser, device, or server. Here is how this error commonly shows up:
This page isn't working
example.com redirected you too many times.
ERR_TOO_MANY_REDIRECTS
Chrome: This page isn't working, [domain] redirected you too many times (ERR_TOO_MANY_REDIRECTS)Firefox: The page isn't redirecting properlySafari: Safari can't open the page because too many redirects occurredEdge: This page isn't working right now / too many redirects
Redirect status codes at a glance
HTTP redirects come in permanent (301, 308) and temporary (302, 307) forms, and a loop happens when any of them points back to an address that eventually points to itself.
| Code | Meaning | Cached by browsers? |
|---|---|---|
| 301 Moved Permanently | The page has permanently moved to a new address; search engines pass ranking to the new URL. | Yes, aggressively and often indefinitely, which is why a bad 301 loop survives reloads. |
| 302 Found (temporary) | The page is temporarily at a different address; the original URL should keep being used. | No by default, so a 302 loop usually clears the moment the rule is fixed. |
| 307 Temporary Redirect | Like a 302 but guarantees the method and body are not changed (a POST stays a POST). | No by default; treated as temporary, so it is not stored long term. |
| 308 Permanent Redirect | Like a 301 but preserves the request method and body unchanged. | Yes; treated as permanent and cached, so a 308 loop can persist after a fix. |
Common redirect-loop causes and how to fix each
A loop is always two rules pointing back at each other. These are the usual pairs and the one-line fix for each.
| Loop pattern | What is happening | Fix |
|---|---|---|
| HTTP to HTTPS loop | A CDN or proxy talks to the origin over HTTP, the origin redirects back to HTTPS, and the request bounces. The classic Cloudflare Flexible SSL trigger. | Set the CDN SSL mode to Full or Full (strict) with a valid origin certificate, and force HTTPS in only one place. |
| www vs non-www loop | example.com redirects to www.example.com while the www host redirects straight back. | Pick one canonical host and make the other redirect to it in a single direction only. |
| Trailing-slash loop | One rule adds a trailing slash and another strips it, so /page and /page/ redirect to each other endlessly. | Choose one form (with or without the slash) and remove the competing rewrite rule. |
| CDN Flexible-SSL loop | Flexible mode encrypts only browser-to-CDN, leaving CDN-to-origin on HTTP, which collides with any origin HTTPS rule or HSTS. | Install a certificate on the origin and switch off Flexible mode; never mix Flexible SSL with an origin force-HTTPS rule. |
| Cookie loop | A stale or corrupted cookie keeps replaying an old redirect, so one visitor loops while the website works for everyone else. | Clear that website's cookies, or open it in a private window to confirm; the website owner cannot fix this one for you. |
What causes ERR_TOO_MANY_REDIRECTS?
- A Cloudflare (or other CDN) SSL mode left on
Flexiblewhile the origin server also forces HTTPS. The proxy reaches your server over HTTP, your server redirects it back to HTTPS, and the request loops. This is the single most common cause. - Conflicting HTTP-to-HTTPS redirects, where more than one layer (a plugin,
.htaccess, and a server-level rule) all try to force HTTPS at once and contradict each other. - A www versus non-www loop, where
example.comredirects towww.example.comand the www version redirects straight back. - In WordPress, a mismatch between the WordPress Address (URL) and Website Address (URL) settings, often left behind by a domain or HTTPS migration.
- An SSL, caching, or redirect-management plugin firing off its own redirects that clash with the rest of the website.
- Conflicting or duplicated rewrite rules in
.htaccesson Apache, or in theserverblock of an nginx configuration. - Stale or corrupted cookies in your browser that keep replaying an old redirect even after the website itself has been fixed.
How to find the cause fast
- Reload the page in an incognito window. Loads fine there? Then a stale cookie or cache in your normal browser is the culprit.
- Feed the URL to a redirect-chain checker, or run
curl -IL https://yourdomain.com, to pin down which two addresses loop. - Open DevTools and watch the Network tab for the repeating 301 or 302 hops.
- On Cloudflare, set the DNS record to "DNS only" (gray cloud) to test whether the proxy or SSL layer is what creates the loop.
How ERR_TOO_MANY_REDIRECTS looks from the outside
A basic uptime check slides right past this one. The loop's first hop frequently returns a healthy 200 or 301 before the bouncing kicks in, so a monitor that reads only that first status code keeps calling the website up while real visitors cannot use it at all. To catch the failure you have to follow the entire redirect chain instead of the first response, which is exactly the journey a person taking the link goes through and a shallow check never does.
How to fix ERR_TOO_MANY_REDIRECTS
If you are a visitor
- Clear the cookies and cached files for that one website, then reload. A bad cookie is the usual reason a single visitor stays stuck in the loop while the website behaves for everyone else.
- Open the page in a private or incognito window. It ignores your existing cookies and cache, giving you a clean attempt.
- Try another browser or device. If the page loads there, the trouble is local data in your usual browser, so clear it.
- Still failing wherever you try it? Then the loop lives on the website's side and only the owner can fix it. To confirm the website is broadly affected rather than just unreachable for you, check Is Website Down?
If you run the website
- On Cloudflare or any other reverse proxy, switch the SSL/TLS mode from
FlexibletoFullorFull (strict), provided your origin has a valid certificate. Flexible mode is the classic trigger for this loop. - Go through your redirect rules and leave exactly one layer forcing HTTPS. Check
.htaccesson Apache or theserverblock on nginx for duplicated or competing rewrite rules, and strip out the redundant ones. - Settle on a single canonical hostname and confirm your www and non-www versions redirect in one direction only, never back and forth.
- On WordPress, check that the WordPress Address (URL) and Website Address (URL) match and both use the right scheme. Locked out of the dashboard? Set
WP_HOMEandWP_SITEURLinwp-config.php. - Disable your SSL, caching, and redirect plugins one at a time to find the one issuing the conflicting redirect, then reconfigure or replace it.
- Clear your server, application, and CDN caches after every change so you are testing the live configuration and not a cached copy of the loop. A redirect checker that lays out the full hop chain makes the loop easy to spot.
Still not fixed? Next steps
- Run
curl -IL https://yourdomain.comand read the chain. It prints everyLocationhop and then dies withcurl: (47) Maximum redirects followed, naming the two addresses that loop. - On Cloudflare or any other proxy, flip the DNS record to DNS only (gray cloud) and try again. If the loop vanishes, blame the proxy or its SSL mode.
- Walk through every layer that can issue a redirect: server config, .htaccess, the application itself, and CDN page rules. Exactly one of them should force HTTPS or canonicalize the host. Not two.
- Once you change something, clear the browser, server, application, and CDN caches and retest in a private window. A cached 301 will happily keep replaying the old loop long after you corrected the rule.
Code & configuration
Copy-paste starting points. Replace example.com and the paths with your own, and test changes on staging before production.
Force HTTPS once, with no duplicate rules (.htaccess, Apache)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Fix WordPress URLs when locked out of wp-admin (wp-config.php)
define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');
See the exact loop
curl -IL https://example.com
How to prevent ERR_TOO_MANY_REDIRECTS
Once the loop is gone, the tougher question is how fast you hear about it next time something breaks. Pulsetic checks your website from multiple locations every 30 seconds and alerts you by email, SMS, voice call, Slack, Discord, Telegram, or webhook the instant it goes down. It will not flag a redirect loop on its own, since a looping page can still return an HTTP 200 at the start of the chain, but it does keep watch on the SSL and certificate problems that so often cause these loops, plus the broader availability picture, so you are not waiting on a visitor to tell you the website is unreachable.
Learn how Pulsetic's uptime monitoring detects this from the outside, across 15+ locations.
Frequently asked questions
-
Is ERR_TOO_MANY_REDIRECTS my fault or the website's?
Almost always the website's. Its redirect rules, SSL setup, or CDN configuration create the loop, and only the owner can untangle that. The lone exception is a stale cookie in your own browser, which is why clearing cookies and giving incognito a shot is worth a minute before you write the website off as broken.
-
Why does clearing cookies sometimes fix it?
Some websites keep redirect state in a cookie. When that cookie holds outdated information, or got set while the website was misconfigured, your browser keeps acting on it and recreates the loop even after the website itself is fixed. Delete the cookie for that website and the browser starts fresh, with no leftover instructions to follow.
-
Why does the website work in incognito but not my normal window?
Incognito opens with no cookies or cached redirects for the website. So if the page loads there but stalls in your regular window, the bad data is parked in your normal browser profile. Clear that website's cookies and cache in your usual browser and it resolves.
-
I changed my Cloudflare SSL setting but still see the error. Why?
Redirect responses get cached at several layers at once: your browser, your server, the application, and the CDN edge. After you change the SSL mode, clear all of those and test in a private window, because you may still be handed a cached copy of the old looping response instead of the corrected one.
-
How many redirects does it take to trigger the error?
The HTTP spec sets no fixed number, but each browser picks its own ceiling and most land near 20 hops. Chrome and Firefox both call it quits after roughly 20 redirects and then throw the error. A real loop bounces between two addresses, so it overshoots that limit in an instant rather than after some long, legitimate chain.
-
Can HSTS cause ERR_TOO_MANY_REDIRECTS?
Yes, by way of a knock-on effect. HTTP Strict Transport Security instructs the browser to always reach your domain over HTTPS, and the browser holds onto that rule for the
max-ageyou set. Now suppose your server or CDN still redirects HTTPS back to HTTP: the browser upgrades to HTTPS, the server kicks it down to HTTP, HSTS upgrades it again, and you have a loop. Repair the server-side redirect so nothing pushes traffic to HTTP, and if a stale entry sticks around, clear the domain fromchrome://net-internals/#hsts. -
How do I clear cookies for just one website in Chrome or Firefox?
In Chrome, click the icon to the left of the address bar, pick
Cookies and website data, thenManage on-device website data, and delete the entry for that domain. In Firefox, head toSettings → Privacy & Security → Cookies and Website Data → Manage Data, search for the domain, and remove it. Only that website's cookies go, so you stay signed in everywhere else while the stale redirect data driving the loop disappears.
-
Catch the next outage before your visitors do.
2-minute setup · Cancel any time
-
No credit card needed