#Что означает ошибка
Internal Server Error Invalid command 'RewriteEngine', perhaps misspelled or defined by a module
Файл .htaccess читается Apache на каждый запрос. Если в нём директива из модуля, который не загружен (например, RewriteEngine без mod_rewrite), или синтаксическая ошибка, сервер отвечает 500, а в error.log пишет Invalid command ... perhaps misspelled or defined by a module not included in the server configuration. Это ошибка конфигурации, а не кода сайта, поэтому её видно сразу после загрузки или правки .htaccess.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не включён mod_rewriteМодуль переписывания не загружен. | Ошибка на RewriteEngine. | Включите модуль. |
| Синтаксическая ошибкаОпечатка, лишний символ, BOM. | .htaccess: ... not allowed here. | Исправьте директиву. |
| AllowOverride NoneСерверу запрещено читать .htaccess. | Директивы игнорируются или дают 500. | Разрешите AllowOverride All. |
| Неверные права на файлФайл недоступен веб-серверу. | В логе «Permission denied». | Выставьте 644. |
#Пошаговое решение
- Посмотрите журналПодключитесь к серверу через SSH и откройте журнал Apache: на Debian/Ubuntu
sudo tail -n 50 /var/log/apache2/error.log, на RHEL путь обычно иной. Воспроизведите 500 и найдите точную строкуInvalid command ... perhaps misspelled or defined by a module not included. Запишите имя директивы и файл.htaccess. Не включайте любые модули без определения, какой действительно нужен. - Проверьте на ошибкеВ файловом менеджере сохраните резервную копию проблемного
.htaccess. Для краткой диагностики в тестовом окружении можно переименовать его и посмотреть, исчезнет ли 500, но такой шаг может отключить правила защиты и маршрутизацию; на рабочем сайте лучше временно закомментировать только ошибочную директиву. После проверки верните защитные правила и посмотрите журнал. - Включите mod_rewriteЕсли неизвестная директива относится к
RewriteEngine/RewriteRule, администратор Debian/Ubuntu может проверить наличие модуляapachectl -M | grep rewrite_module. Если модуль действительно отсутствует и разрешено менять конфигурацию, используйтеsudo a2enmod rewrite, затемapachectl configtestиsystemctl reload apache2. На RHEL/AlmaLinux проверяют загрузку модуля иначе; не переносите командыa2enmodна эту систему. - Разрешите переопределениеПроверьте блок
<Directory>нужного виртуального хоста и действующийAllowOverride. Не включайтеAllowOverride Allглобально ради одного файла: это расширяет набор разрешённых директив. Укажите только необходимые категории переопределений, если этого требует приложение, и сверяйте результат с журналом Apache. После копии конфигурации выполнитеapachectl configtest. - Проверьте синтаксисВыполните
sudo apachectl configtest:Syntax OKподтверждает основную конфигурацию, но ошибки конкретного.htaccessмогут проявляться только при HTTP-запросе. Поэтому после правки откройте именно проблемную страницу и сразу проверьте error.log. Не считайте отсутствие ошибки вconfigtestдоказательством, что всё исправлено. - Сохраните без BOMОткройте
.htaccessтекстовым редактором, показывающим кодировку. Если он повреждён после копирования из текстового редактора, сохраните как UTF-8 без BOM и проверьте, что директивы и комментарии не разбиты переносами строк. Перед изменением сохраните прежний файл, после — проверьте точный URL. Кодировка редко бывает единственной причиной, поэтому ориентируйтесь прежде всего на строку ошибки в журнале. - Установите праваПроверьте чтение файла Apache: через SSH
ls -l .htaccessиnamei -l /реальный/путь/.htaccess. Не задавайтеchmod 644автоматически, если хостинг требует более строгую группу или ACL. Нужны разрешения на чтение веб-сервером и проход по каталогам, но не запись для всех. При ошибке доступа меняйте только подтверждённые права с записью старых значений. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
- Перезагрузите ApacheПосле устранения обнаруженной директивы выполните
sudo apachectl configtest, затемsudo systemctl reload apache2на Debian/Ubuntu илиhttpdна RHEL. Откройте несколько страниц, включая закрытые административные URL, чтобы убедиться, что правила доступа не сняты. Если появится новая ошибка, верните копию.htaccessи изучите журнал с точным временем запроса.
Обёртка <IfModule mod_rewrite.c> защищает сайт от 500, если модуль отсутствует, но тогда ЧПУ просто не заработают — проверьте модуль отдельно. На виртуальном хостинге включить модули самостоятельно нельзя: напишите в поддержку или проверьте раздел «Настройки PHP/Apache» в панели. Если директива работает только в основной конфигурации (php_value при PHP-FPM), в .htaccess её использовать нельзя — выдаст 500; такие параметры задавайте в .user.ini. Документация — .