Apache Linux 500

Apache: Internal Server Error из-за .htaccess (Invalid command)

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

Ошибка Apache 500 с «Invalid command RewriteEngine» в .htaccess возникает, когда не включён mod_rewrite или не разрешён AllowOverride. Включите модуль, проверьте синтаксис и права, переименуйте .htaccess для диагностики.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

#Что означает ошибка

500
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.

#Пошаговое решение

  1. Посмотрите журналПодключитесь к серверу через 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. Не включайте любые модули без определения, какой действительно нужен.
  2. Проверьте на ошибкеВ файловом менеджере сохраните резервную копию проблемного .htaccess. Для краткой диагностики в тестовом окружении можно переименовать его и посмотреть, исчезнет ли 500, но такой шаг может отключить правила защиты и маршрутизацию; на рабочем сайте лучше временно закомментировать только ошибочную директиву. После проверки верните защитные правила и посмотрите журнал.
  3. Включите mod_rewriteЕсли неизвестная директива относится к RewriteEngine/RewriteRule, администратор Debian/Ubuntu может проверить наличие модуля apachectl -M | grep rewrite_module. Если модуль действительно отсутствует и разрешено менять конфигурацию, используйте sudo a2enmod rewrite, затем apachectl configtest и systemctl reload apache2. На RHEL/AlmaLinux проверяют загрузку модуля иначе; не переносите команды a2enmod на эту систему.
  4. Разрешите переопределениеПроверьте блок <Directory> нужного виртуального хоста и действующий AllowOverride. Не включайте AllowOverride All глобально ради одного файла: это расширяет набор разрешённых директив. Укажите только необходимые категории переопределений, если этого требует приложение, и сверяйте результат с журналом Apache. После копии конфигурации выполните apachectl configtest.
  5. Проверьте синтаксисВыполните sudo apachectl configtest: Syntax OK подтверждает основную конфигурацию, но ошибки конкретного .htaccess могут проявляться только при HTTP-запросе. Поэтому после правки откройте именно проблемную страницу и сразу проверьте error.log. Не считайте отсутствие ошибки в configtest доказательством, что всё исправлено.
  6. Сохраните без BOMОткройте .htaccess текстовым редактором, показывающим кодировку. Если он повреждён после копирования из текстового редактора, сохраните как UTF-8 без BOM и проверьте, что директивы и комментарии не разбиты переносами строк. Перед изменением сохраните прежний файл, после — проверьте точный URL. Кодировка редко бывает единственной причиной, поэтому ориентируйтесь прежде всего на строку ошибки в журнале.
  7. Установите праваПроверьте чтение файла Apache: через SSH ls -l .htaccess и namei -l /реальный/путь/.htaccess. Не задавайте chmod 644 автоматически, если хостинг требует более строгую группу или ACL. Нужны разрешения на чтение веб-сервером и проход по каталогам, но не запись для всех. При ошибке доступа меняйте только подтверждённые права с записью старых значений.
  8. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Включение модуля и применение конфигурации (Debian/Ubuntu).
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Включение модуля и применение конфигурации (Debian/Ubuntu).
    sudo a2enmod rewrite
    sudo apachectl configtest
    sudo systemctl reload apache2
    sudo tail -n 20 /var/log/apache2/error.log

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

    Вариант 2Минимальный рабочий .htaccess для ЧПУ.
    Текст
    Минимальный рабочий .htaccess для ЧПУ.
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
  9. Перезагрузите 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. Документация — Apache: mod_rewrite.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.