## Summary

*"This page isn't working: example.com redirected you too many times. ERR_TOO_MANY_REDIRECTS"* is what the browser shows when two redirect rules keep sending a visitor back and forth. On sites behind Cloudflare it most often starts right after enabling Cloudflare, adding an SSL plugin, switching to HTTPS, or moving hosts. The whole site, or only `/wp-admin`, stops loading.

This guide gives you the fast isolation steps first. If you would rather hand it over, SazM offers an affordable, low-cost redirect-loop fix for a **fixed $99 price, delivered within 48 hours**, entirely in writing: no calls, no project manager, one senior developer.

## Where the Error Lives

A redirect loop is a chain of `301`/`302` responses that never ends. Check the chain itself, then the three places that can issue redirects:

```bash
curl -sIL --max-redirs 6 https://example.com/ | grep -iE "^(HTTP|location)"
```

```text
Cloudflare dashboard → SSL/TLS → Overview      # encryption mode (Flexible, Full, Full strict)
Cloudflare dashboard → Rules → Redirect Rules  # custom redirects
.htaccess / nginx server block                 # HTTP to HTTPS and www rules
wp-config.php, Settings → General              # WP_HOME, WP_SITEURL, FORCE_SSL_ADMIN
```

If the output alternates between `http://` and `https://` for the same URL, the loop is HTTP to HTTPS. If it alternates between `www` and non-`www`, two host rules disagree.

## Quick Fix Breakdown (DIY)

- **Check the Cloudflare SSL/TLS mode first.** In Flexible mode Cloudflare talks to your origin over plain HTTP. If the origin then redirects HTTP to HTTPS, the request loops. Install a valid certificate on the origin (a free Cloudflare Origin CA certificate works) and switch to **Full (strict)**.
- **Keep one place in charge of HTTPS redirects.** Use either Cloudflare's "Always Use HTTPS" or an origin rule, not an SSL plugin plus `.htaccess` plus Cloudflare together.
- **Make WordPress see the original protocol behind a proxy.** If you must stay on Flexible temporarily, add this above the "That's all, stop editing" line in `wp-config.php`:

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

- **Match the site URLs to the live address.** Compare the values and fix any `http://` or wrong-host entry:

```bash
wp option get home
wp option get siteurl
wp option update home 'https://example.com'
wp option update siteurl 'https://example.com'
```

- **Look for duplicate rules in `.htaccess`.** Two `RewriteRule ... https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]` blocks, or a leftover host rule from staging, will loop. Back up the file, then restore the default WordPress block.
- **Disable the SSL or redirect plugin with WP-CLI** if you cannot reach wp-admin:

```bash
wp plugin deactivate really-simple-ssl --skip-plugins --skip-themes
```

- **Purge caches and test in a private window.** Browsers cache `301` responses. Purge Cloudflare's cache and any page-cache plugin, then retest with the `curl` command above rather than trusting the browser.
- **Admin-only loops:** if only `/wp-admin` loops, check `FORCE_SSL_ADMIN`, the cookie domain (`COOKIE_DOMAIN` in `wp-config.php`) and any rule in Cloudflare that caches or redirects `/wp-admin` or `/wp-login.php`.

If none of these isolates it within an hour, stop. Every extra hour is lost visits and lost orders.

## Hand It Over: $99 Fixed, Within 48 Hours

Redirect loops drag on because the cause is spread across Cloudflare, the origin server and WordPress, and each layer looks fine when checked alone. One developer who traces the whole chain ends the guessing.

What you get for **$99**:

- **A fixed price agreed before work starts.** One issue, one flat fee, no hourly meter.
- **Delivery within 48 hours** of access, with the fix verified on staging before anything touches production.
- **Fully written, fully async.** You send the URL, the output of the `curl` command above, what changed recently (Cloudflare setup, SSL plugin, host move) and a screenshot of the Cloudflare SSL/TLS page. You get questions, progress and proof in writing. There are no calls, meetings or project managers.
- **Written proof it works:** the root cause in plain language, which rules or settings changed, a before and after redirect trace, and a rollback note.
- **Money-back guarantee** if the agreed root cause cannot be resolved.
- **Safe access only:** a limited hosting, SSH or Cloudflare account that you can revoke. Never send passwords through the inquiry form.

If the loop is gone but the site is crashing or blank, see [WordPress crash recovery after a plugin update](/articles/wordpress-crash-recovery-after-plugin-update). If checkout misbehaves after the fix, see [WooCommerce checkout not working](/articles/woocommerce-checkout-not-working-fix).

Behind it: 20+ years in production (since Oct 2006) and 100+ projects in the portfolio.

**[Get this error fixed for $99 →](/bug-fix-services)** · [Queue an urgent fix](/checkout/emergency) · [See past projects](/projects)

For ongoing upkeep, see [WordPress care](/wordpress-care).

## Frequently Asked Questions

### What causes ERR_TOO_MANY_REDIRECTS with Cloudflare and WordPress?
Usually Cloudflare is in Flexible SSL mode while the origin or an SSL plugin redirects HTTP to HTTPS, so each request is sent back to the start. Mismatched `home` and `siteurl` values, duplicate `.htaccess` rules and cached `301` responses are the other common causes.

### How do I fix too many redirects after enabling Cloudflare?
Install a valid certificate on the origin and set Cloudflare SSL/TLS to Full (strict), keep only one layer responsible for HTTPS redirects, confirm `home` and `siteurl` use the live HTTPS address, then purge caches and retest with `curl -IL`.

### Why does only wp-admin redirect in a loop?
Admin loops often come from `FORCE_SSL_ADMIN` combined with a proxy that hides HTTPS from WordPress, a wrong cookie domain, or a Cloudflare rule that redirects or caches `/wp-admin`. Passing the `X-Forwarded-Proto` header through or using Full (strict) normally resolves it.

### How much does it cost to fix a WordPress redirect loop?
SazM fixes one issue for a fixed $99, delivered within 48 hours, with a money-back guarantee if the agreed root cause cannot be resolved. Typical agency hourly rates are higher and open-ended, while very low marketplace gig prices rarely include root-cause diagnosis, a staging test or a guarantee.

### Do I need a call to explain the problem?
No. Send the URL, the redirect trace and what changed recently. Everything, including questions and the final write-up, happens in writing.
