Как исправить ошибку Слишком много перенаправлений в браузере

Если вы видите ошибку Слишком много перенаправлений (ERR_TOO_MANY_REDIRECTS) в своем веб-браузере, значит что-то пошло не так. Также эта ошибка сопровождается сообщением Эта веб-страница имеет цикл перенаправления (This webpage has a redirect loop) и она блокирует загрузку сайта.

Ошибка Слишком много перенаправлений означает, что сайт продолжает циклично перенаправляться между разными адресами и это может никогда не прекратиться. Ваш браузер защищает вас от этого, разрешая только определенное количество перенаправлений (часто около десяти), прежде чем он «устанет» от этого и не выдаст данную ошибку.

Ошибка о цикличных перенаправлениях по-разному проявляется в разных браузерах:

Эта страница не работает (This page isn’t working)
{domain} перенаправил вас слишком много раз. ({domain} redirected you too many times.)
Или
Эта веб-страница имеет цикл перенаправления (This webpage has a redirect loop)
Попробуйте очистить ваши куки. (Try clearing your cookies.)
ERR_TOO_MANY_REDIRECTS

Google Chrome

 

Страница не перенаправляет должным образом (The page isn’t redirecting properly).
Произошла ошибка при подключении к {domain}. Эта проблема иногда может быть вызвана отключением или отказом принимать куки. (An error occured during a connection to {domain}. This problem can sometimes be caused by disabling or refusing to accept cookies.)

Mozilla Firefox

 

Safari не может открыть страницу (Safari Can’t Open the Page).
При попытке открыть {domain} произошло слишком много перенаправлений. Это может произойти, если вы открываете страницу, которая перенаправляется на другую страницу, которая затем перенаправляется на исходную страницу. (Too many redirects occurred trying to open {domain}. This might occur if you open a page that is redirected to open another page which is then redirected to open the original page.)

Safari

 



Очень часто это является результатом конфликтных перенаправлений, одно из которых пытается принудительно установить HTTPS (SSL) соединение, а другое – обратно HTTP (не-SSL), или между URL-адресами с www и без www.

Для таких CMS, ​​как WordPress или Magento, это решается приведением к общему конфигурации base_url или URL-адреса сайта в коде или базе данных с перенаправлением в файле .htaccess.

 

 

Как определить причину цикличного перенаправления

Вы можете следить за всеми перенаправлениями с помощью инструментов разработчика в браузере Firefox или Chrome. Эти инструменты обычно открываются нажатием клавиши F12 (или Ctrl+Shift+I). Откройте Сеть (Network), а затем перезагрузите страницу, на которой у вас возникла проблема.

После перезагрузки страницы вы увидите список перенаправлений. Проанализировав результаты, вы сможете найти «виновника» (если срабатывает перенаправление на одну и ту же страницу).

 

Основные типы перенаправления (код ответа состояния HTTP):

  • 301 редирект (постоянное перенаправление) – означает, что страница или элемент перемещен на постоянной основе, и браузер должен искать его в новом месте. Чаще всего записываются в файле .htaccess.
  • 302 перенаправление или редирект – это временное перенаправление, которое означает, что страница или элемент перемещен временно, и его адрес в будущем может измениться. Чаще всего записываются в коде веб-сайта.

 

 

Как исправить ошибку перенаправлений (редиректов)

Шаг №1: Очистить кэш и куки браузера

Очень часто циклические перенаправления могут вызываться файлами cookie в браузере, в которых закэшированы старые редиректы. Данные браузера, такие как история просмотров, кэш, файлы cookie и т.д., могут содержать ошибочные данные, которые вызывают ошибку ERR_TOO_MANY_REDIRECTS. Очистка этих данных – эффективный способ исправить ошибку. Чтобы очистить данные просмотра:

  • В Google Chrome нажмите Ctrl+Shift+Delete, выберите необходимые данные, время жизни данных и нажмите Очистить данные (clear data)
  • В Mozilla Firefox нажмите кнопку «Меню» и выберите «Параметры». Выберите Конфиденциальность, а затем очистить свою недавнюю историю (clear your recent history). Выберите Everything для диапазона времени, а затем нажмите Очистить сейчас (Clear Now).

 

После очистки данных браузера вы можете попробовать зайти на сайт и посмотреть, исчезла ли ошибка.

 

 

Шаг №2: Попробовать в других браузерах

Ошибка ERR_TOO_MANY_REDIRECTS может возникать только в браузере, который вы используете. Вы можете попробовать открыть тот же URL в другом браузере. Если ошибка не устраняется, значит проблема может возникать на стороне сервера.

 

 

Правильные настройки редиректов (перенаправлений)

Как мы уже упоминали выше, причиной ошибки могут быть неправильные настройки на вашем сайте. В основном, они касаются настроек редиректов в файле .htaccess. Данный файл – это файл конфигурации, который используется для изменения поведения сервера Apache для каждой папки на сайте или сервере. С его помощью можно редактировать только некоторые конфигурации Apache, хотя перенаправления обычно разрешается редактировать.

У вас может быть несколько файлов .htaccess, которые каскадно влияют на каталоги. Если у вас есть один .htaccess в родительском каталоге, и другой в подкаталоге, они оба будут влиять на этот подкаталог. Т.е., это может быть причиной конфликта между этими файлами на разных уровнях.

 

Ниже приведен ряд примеров перенаправления (редиректов) в файле .htaccess, которые обычно используются на сайтах.

 

Принудительный HTTPS

Приведенный ниже код сначала проверяет, поступил ли запрос на сервер с использованием HTTP или HTTPS. Если в запросе не использовался HTTPS, то конфигурация скажет браузеру перенаправить на HTTPS-версию того же веб-сайта и URL-адреса, которые были запрошены ранее:

RewriteEngine On  RewriteCond %{HTTPS} off  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]  

 

 

Принудительный HTTPS при использовании прокси-сервера

Вы можете использовать прокси-сервер, например, балансировщик нагрузки или веб-брандмауэр, для которого можно настроить использование SSL (HTTPS) на внешнем интерфейсе, но не на внутреннем. Чтобы это работало правильно, вам нужно проверять не только HTTPS в запросе, но и проверять, передал ли прокси-сервер исходный HTTPS-запрос на сервер, используя только HTTP. Код ниже проверяет, был ли запрос перенаправлен с HTTPS, и, если это так, не пытается дополнительно его перенаправлять:

RewriteEngine On  RewriteCond %{HTTPS} off  RewriteCond %{HTTP:X-Forwarded-Proto} =http  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]  

 

 

Перенаправление с HTTP на HTTPS в Nginx

Если на вашем веб-сервере работает Nginx, вы можете легко перенаправить весь ваш HTTP-трафик на HTTPS, добавив следующий код в файл конфигурации Nginx:

server {   listen 80;   server_name domain.com www.domain.com;   return 301 https://domain.com$request_uri;  }  

 

Замените domain.com на свой домен.

 

 

Принудительно без www

Следующий код в файле .htaccess проверяет, был ли запрошен сайт с www в начале доменного имени. Если www есть в URL, тогда он переписывает запрос и говорит браузеру перенаправить на доменное имя без www:

RewriteEngine On  RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]  

 

 

Принудительно с www

Этот код в файле .htaccess проверяет, не было ли запрошено имя сайта с www в начале доменного имени. Если www не включен в URL, тогда он переписывает запрос и говорит браузеру перенаправить на www-версию домена:

RewriteEngine On  RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule (.*) http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]  

 

 

 

Краткий итог

Если на вашем сайте есть редирект в файле .htaccess, что перенаправляет на URL, который не совпадает с тем, что находится в базе данных, вы можете получить ошибку в браузере о бесконечном цикле перенаправления (ERR_TOO_MANY_REDIRECTS), как описано выше.

Однако теперь вы знаете, как выглядят некоторые распространенные перенаправления в .htaccess. Также, с помощью данной статьи, вы сможете сами протестировать, найти причину ошибки, а также устранить ее самостоятельно.

Спасибо, что читаете нас!