ERR_TOO_MANY_REDIRECTS / Страница перенаправила вас слишком много раз
#Как возникает цикл
Редирект с HTTP на HTTPS должен срабатывать только на запросы, пришедшие по HTTP. Цикл возникает, когда веб-сервер или приложение не понимает, что соединение уже защищено. Типичные сценарии: сайт за обратным прокси или CDN (Cloudflare в режиме Flexible), где к серверу запрос приходит по HTTP, а сервер снова перенаправляет на HTTPS; одновременно включены редиректы на нескольких уровнях (nginx, .htaccess, плагин CMS, панель хостинга); в WordPress siteurl и home содержат http://; смешаны www и без www.
#Типичные причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Cloudflare Flexible и редирект на сервереСервер видит HTTP. | Цикл между CDN и сервером. | Режим Full (strict). |
| Нет X-Forwarded-ProtoПриложение не знает про HTTPS. | Редирект повторяется. | Передайте заголовок. |
| Несколько редиректов.htaccess, nginx, плагин. | Двойные правила. | Оставьте один. |
| Адрес в CMS с http://siteurl. | Приложение перенаправляет на http. | Исправьте на https. |
| Смешаны www и без wwwДва правила. | Цикл между вариантами. | Единый основной адрес. |
| Кеш браузера или CDNСтарый 301. | Помогает приватное окно. | Очистите кеш. |
#Порядок
- Проследите цепочку редиректов командой curlНа компьютере откройте PowerShell/терминал с curl и выполните
curl -IL --max-redirs 10 https://example.comс фактическим доменом. СравнитеLocationдля HTTP и HTTPS, с www и без. Если адреса чередуются, сохраните несколько последовательных ответов: это укажет, какой переход образует цикл. - Определите, кто выдаёт каждый редиректВ панели DNS/CDN определите, где завершается шифрованное соединение. При использовании Cloudflare режим Flexible с перенаправлением на HTTPS на исходном сервере может приводить к постоянному циклу. Проверьте реальный сертификат на origin прежде чем переключать режим на Full (strict); при неверном сертификате сначала настройте его.
- Оставьте редирект на одном уровнеАдминистратор в конфигурации Nginx/Apache найдите правила
return 301,rewrite,Redirectи.htaccess; также проверьте CMS/плагины перенаправлений. Запишите действующий канонический URL и решите, на каком одном уровне выполняется окончательное перенаправление. Не вводите сразу несколько взаимных правил для www и HTTPS. - Если используется Cloudflare, переключите режим SSL/TLS с Flexible на FullПроверьте настройки адреса сайта в самой CMS: WordPress — «Настройки → Общие», другие движки — раздел основных адресов/конфигурационный файл. Смена
http://наhttps://должна соответствовать реальному сертификату, настройкам reverse proxy и правильным заголовкам, передаваемым доверенным прокси. Перед правкой базы сделайте резервную копию. - Настройте передачу заголовка X-Forwarded-Proto и его использованиеСохраните прежнюю конфигурацию веб-сервера, измените одно доказанно лишнее правило и выполните
nginx -tлибоapachectl configtest. Только при успешной проверке применитеreload; проверяйте цепочку curl после каждого изменения, чтобы знать, какая именно правка решила проблему. - В CMS задайте адрес сайта с https://Если после правки серверной схемы браузер ещё выдаёт цикл, повторите запрос из приватного окна и проверьте cookie/кэш перенаправлений только этого домена. Для HSTS сброс браузера не заменяет действующий HTTPS-сертификат; не отключайте защиту сертификатов и не советуйте посетителям игнорировать предупреждения.
- Очистите кеш сайта, CDN и браузераВ конце убедитесь, что любой исходный вариант адреса приводит к одному выбранному HTTPS-адресу без возврата к HTTP, а
curl -ILзаканчивается ответом 200 или другим ожидаемым кодом страницы. Если цикл сохраняется только через CDN, сравните заголовки на origin и прокси и передайте диагностику их администраторам. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Если вы потеряли доступ к админке
Если сайт недоступен из-за цикла, исправьте адреса через базу данных: UPDATE wp_options SET option_value='https://example.ru' WHERE option_name IN ('siteurl','home');. Для других CMS найдите параметр базового URL в конфигурационном файле. Отключите плагины редиректов, переименовав их каталог в wp-content/plugins.