Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Apache Error: AH00124: Request exceeded the limit of 10 internal redirects (RewriteRule loop) Linux / DevOps

Apache Error AH00124: Request exceeded limit of 10 internal redirects — Фикс

Обновлено: 18.08.2026  ·  Официальная база знаний

Клиент при переходе на любую страницу сайта получает ошибку 500 Internal Server Error. В системном журнале error.log Apache регистрируется бесконечный цикл внутренних перенаправлений модуля переписывания URL: [core:error] [pid 1234:tid 5678] [client ...] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel rewrite:trace8' to trace the action.

Причина зацикливанияПример ошибочного правилаМеханизм бесконечного цикла
Отсутствие флага [L]RewriteRule ^(.*)$ /index.phpКаждый результат переписывания снова прогоняется через весь список правил
Отсутствие проверки существования файлаРедирект без !-f / !-dЗапрос к index.php снова перенаправляется на index.php
Конфликт слэшей в конце URLПравило принудительного добавления /Циклический конфликт между редиректом Apache и роутером CMS
  • Браузер выводит ошибку 500 после нескольких миллисекунд зависания.
  • Процессорное время сервера расходуется на пустые циклы трансляции URL.
  1. Откройте файл .htaccess в корне сайта или конфигурацию виртуального хоста.
  2. Классический правильный шаблон для CMS и фреймворков (WordPress, Laravel, Bitrix):
    Убедитесь, что перед финальным RewriteRule стоят обязательные проверки на существование реального файла или папки на диске:
    RewriteEngine On
    RewriteBase /
    
    # Если запрошен реальный файл или папка — отдаем его напрямую:
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    
    # Иначе отправляем запрос на единую точку входа index.php:
    RewriteRule ^ index.php [L]
  3. Если используется перенаправление на HTTPS, предотвратите зацикливание при работе за Reverse Proxy (Cloudflare, Nginx):
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  4. Для детальной отладки включите трассировку модуля переписывания в блоке VirtualHost:
    LogLevel rewrite:trace3
    и изучите лог, чтобы увидеть, какое именно правило вызывает повторный вход в цикл.
  5. После исправления правил протестируйте синтаксис: sudo apache2ctl configtest && sudo systemctl reload apache2.
Опасность LimitInternalRecursion: Никогда не пытайтесь «решить» проблему директивой LimitInternalRecursion 50. Это не исправит логическую ошибку в регулярных выражениях RewriteRule, а лишь заставит сервер совершать 50 бесполезных итераций перед падением, увеличивая нагрузку на CPU.
Практический опыт инженера: Замените устаревший флаг `[L]` на современный флаг `[END]` в правиле перенаправления на `index.php`: `RewriteRule ^ index.php [END]`. Это на корню исключает возможность повторного входа в цикл обработки.

Частые вопросы (FAQ)

Почему лимит по умолчанию равен именно 10 редиректам?

Значение 10 выбрано разработчиками Apache как разумный баланс: этого достаточно для любых сложных цепочек подстановок, но предотвращает полное зависание потока воркера при возникновении бесконечного цикла.

Что означает флаг [L] в RewriteRule?

Флаг [L] (Last) приказывает серверу остановить текущий проход по списку правил mod_rewrite для данного запроса. Однако в контексте .htaccess при изменении URI сервер может начать новый проход, если нет условия RewriteCond %{REQUEST_FILENAME} -f.

Что означает флаг [END] в Apache 2.4?

Флаг [END] полностью прекращает выполнение всех правил mod_rewrite и блокирует запуск повторных внутренних подзапросов в контексте каталога (доступен начиная с Apache 2.3.9).

Как временно отключить .htaccess для проверки?

Переименуйте файл: mv .htaccess .htaccess.bak и проверьте, исчезла ли ошибка 500.