Бесконечный цикл редиректов в IIS URL Rewrite: исправление ERR_TOO_MANY_REDIRECTS
Симптомы циклической переадресации в IIS
При открытии сайта браузер выдает ошибку: ERR_TOO_MANY_REDIRECTS (Слишком много перенаправлений), либо сервер возвращает HTTP Error 500.52 - URL Rewrite Module Error. Запросы бесконечно перенаправляются между HTTP и HTTPS или между URL с www и без www.
| Симптом | Причина |
|---|---|
| ERR_TOO_MANY_REDIRECTS | Правило редиректа на HTTPS не учитывает SSL-терминацию на внешнем балансировщике |
| HTTP 500.52 | Синтаксическая ошибка в регулярном выражении или циклический Rewrite на один и тот же шаблон |
| Зацикливание слэшей в конце URL | Конфликт между правилом добавления слэша (Trailing Slash) и ЧПУ сайта |
Пошаговое исправление правил перенаправления URL Rewrite
- Настройте эталонное правило редиректа с HTTP на HTTPS: убедитесь, что включен флаг
stopProcessing="true"и используется проверка{HTTPS} off:<rule name="Redirect to HTTPS" stopProcessing="true"><match url="(.*)" /><conditions><add input="{HTTPS}" pattern="^OFF$" /></conditions><action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /></rule> - Исправьте редирект при работе за CDN / Reverse Proxy (SSL Offloading): проверяйте заголовок
X-Forwarded-Proto:<rule name="Redirect HTTPS Proxy" stopProcessing="true"><match url="(.*)" /><conditions><add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" /></conditions><action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /></rule> - Проверьте флаг stopProcessing на всех правилах: каждое терминальное правило должно содержать атрибут
stopProcessing="true", чтобы предотвратить выполнение нижестоящих конфликтующих правил.
Совет: Во время отладки правил URL Rewrite всегда используйте временный редирект redirectType="Found" (HTTP 302). Браузеры жестко кэшируют постоянные редиректы Permanent (HTTP 301), что мешает проверке внесенных изменений.
Частые вопросы (FAQ)
Почему браузер продолжает циклический редирект после удаления правила?
Браузер сохранил постоянный редирект 301 в локальном кэше. Очистите кэш браузера или проверьте сайт в режиме инкогнито.
В чем разница между действиями Redirect и Rewrite в IIS?
Redirect (301/302) сообщает браузеру запросить новый URL (URL в строке меняется). Rewrite прозрачно переписывает путь внутри веб-сервера без изменения адреса у клиента.
Что означает переменная {R:1} в правилах URL Rewrite?
Это обратная ссылка на первую группу захвата регулярного выражения, указанного в блоке match url.
Как проверить регулярные выражения URL Rewrite на ошибки?
Используйте встроенный инструмент 'Тестирование шаблона' (Test pattern) в модуле URL Rewrite консоли IIS Manager.