#Что означает ошибка
500 Internal Server Error из-за .htaccess
Ошибка 500 Internal Server Error в Apache после правки .htaccess означает, что в файле неверная директива, модуль не включён, либо недостаточно прав. Единственный надёжный способ найти причину — журнал ошибок Apache.
Если сайт сломался сразу после изменения .htaccess, самый быстрый способ — переименовать файл и проверить, вернётся ли сайт.
Далее нужно найти строку с ошибкой.
500 из-за .htaccess — неверная директива или не включён модуль. Откройте error.log: он указывает строку и причину.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Неверная директива.htaccess. | 500. | Исправьте. |
| Нет модуляmod_rewrite. | Ошибка. | Включите. |
| Права на файлыДоступ. | 500. | Проверьте. |
| Ошибка PHPPHP. | 500. | Проверьте логи. |
#Пошаговое решение
- Переименуйте .htaccessЕсли ошибка 500 началась после правки
.htaccess, сначала через панель хостинга или SSH сохраните его копию в каталог вне документ-корня. Для короткого теста переименуйте файл в.htaccess.disabledи проверьте страницу; это может снять правила авторизации и запреты, поэтому на публичном сайте лучше проверять через тестовый стенд или в окно обслуживания. Сразу верните файл после диагностики. - Прочитайте журналОткройте журнал ошибок Apache в панели или по SSH (
sudo tail -n 50 /var/log/apache2/error.logна Debian) и найдите строку по времени запроса. СообщенияInvalid command,Options not allowed here,RewriteRuleилиAH...укажут точную директиву. Исправьте конкретную строку, а не удаляйте весь файл окончательно. - Включите нужные модулиЕсли журнал сообщает
Invalid command RewriteEngine, администратор проверяетapachectl -M | grep rewriteи наличие модуля. Для Debian/Ubuntu возможно включение черезa2enmod rewrite, но на других системах порядок иной. После проверки модуля убедитесь, что сам.htaccessдопускается в нужном каталоге. - Проверьте AllowOverrideВ конфигурации виртуального хоста откройте
<Directory путь_к_сайту>и проверьтеAllowOverride: приNoneдирективы.htaccessигнорируются, а некоторые настройки недопустимы в.htaccessвообще. Не ставьтеAllowOverride Allна весь сервер, если достаточно ограниченного набора директив для конкретного сайта. - Проверьте праваДля ошибок файлового доступа выполните
namei -l /путь/к/.htaccessи проверьте владельца файла и родительских каталогов. Не задавайтеchmod 777, а после исправления выполнитеsudo apachectl configtest, затем согласованныйreloadи повторите исходный запрос. Закрытые URL должны остаться закрытыми.
#Как найти причину
Откройте журнал: sudo tail -n 30 /var/log/apache2/error.log (RHEL: /var/log/httpd/error_log). Типичные сообщения: Invalid command 'RewriteEngine' — не включён mod_rewrite (sudo a2enmod rewrite && sudo systemctl restart apache2); Options not allowed here — в виртуальном хосте нужно AllowOverride All; syntax error — опечатка в директиве.
#Типичные причины
Директивы из nginx или другого сервера; php_value в .htaccess при работе PHP через FPM (используйте .user.ini); неверные права: файлам нужно 644, каталогам 755, и сайт не должен принадлежать root; бесконечный цикл правил RewriteRule; лишние символы (BOM) при сохранении файла в Блокноте — сохраняйте в UTF-8 без BOM.
#Безопасное тестирование
Проверьте конфигурацию: sudo apachectl configtest. Правьте .htaccess небольшими шагами и проверяйте после каждой правки. Храните копию рабочего файла.
sudo tail -n 30 /var/log/apache2/error.logsudo apachectl configtest#Как проверить результат
После исправления откройте сайт с жёстким обновлением страницы (Ctrl+F5) и проверьте журнал: новые строки об ошибке не должны появляться. Проверьте, что редиректы работают: curl -I http://сайт/страница покажет код и заголовок Location. Если используется кэширование (CDN, плагины), очистите его, иначе вы увидите старую ошибку.