Траблшутинг синтаксических ошибок в .htaccess: отладка LogLevel rewrite:trace5
- Ошибка
500 Internal Server Errorпри загрузке страниц с файлами.htaccess. - В
error_logфиксируется.htaccess: Option ... not allowed hereилиInvalid command 'RewriteEngine'. - Правила перенаправления mod_rewrite зацикливаются (
Request exceeded the limit of 10 internal redirects).
1. Проверка синтаксиса и загрузки mod_rewrite
apachectl -M | grep rewrite
# Если модуль отсутствует, включите его (Debian/Ubuntu):
a2enmod rewrite && systemctl restart apache22. Включение директивы AllowOverride в VirtualHost
Убедитесь, что в файле конфигурации хоста разрешена обработка .htaccess:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>3. Включение глубокой трассировки mod_rewrite
Добавьте директиву LogLevel внутри блока VirtualHost:
LogLevel warn rewrite:trace5(Уровни trace1–trace3 показывают базовые совпадения, trace5–trace8 выводят подробный пошаговый разбор каждого RewriteCond и RewriteRule).
4. Мониторинг отладочного журнала
tail -f /var/log/apache2/error.log | grep -E "$$rewrite:trace[1-8]$$"5. Предотвращение циклических перенаправлений
Убедитесь, что в .htaccess присутствует проверка существования файлов:
RewriteEngine On
RewriteBase /
# Прекратить перезапись, если файл или папка физически существуют
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Перенаправление на фронт-контроллер
RewriteRule ^ index.php [L,QSA] Частые вопросы (FAQ)
Почему после исправления .htaccess ошибка 500 остается?
Проверьте права доступа к файлу .htaccess. Веб-сервер (пользователь www-data или apache) должен иметь права на чтение (права 644).
Каково влияние LogLevel rewrite:trace8 на продакшн?
Уровни выше trace3 генерируют огромный объем дискового I/O и могут моментально заполнить системный диск логами. Используйте их только во время отладки.