Apache Linux

Apache: mod_rewrite не работает, ЧПУ дают 404

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

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

Если ЧПУ не работают, включите mod_rewrite и разрешите AllowOverride All для каталога сайта.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Включение модуля
  5. AllowOverride
  6. Проверка правил
  7. Типичные причины 404 и 500 после включения

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

Сообщение
mod_rewrite не работает, ЧПУ дают 404

Если ЧПУ на Apache дают 404 и .htaccess не действует, модуль mod_rewrite отключён или Apache не разрешает переопределение настроек (AllowOverride None).

Исправление занимает несколько минут и требует перезапуска Apache.

Если ЧПУ не работают, включите mod_rewrite и разрешите AllowOverride All для каталога сайта.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Модуль выключенmod_rewrite.404.a2enmod rewrite.
AllowOverride NoneКонфиг..htaccess игнорируется.Измените на All.
Ошибка правилRewriteRule.404.Проверьте.
Нет .htaccessФайл.404.Создайте.

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

  1. Включите mod_rewriteДля Apache на Debian/Ubuntu откройте SSH-терминал и выполните apache2ctl -M | grep rewrite; на RHEL используйте httpd -M. Если модуль отсутствует и вы управляете сервером, на Debian выполните sudo a2enmod rewrite после копии конфигурации; на виртуальном хостинге обратитесь к поддержке, так как модуль управляется провайдером.
  2. Разрешите AllowOverride AllНайдите DocumentRoot через apachectl -S и откройте связанный <Directory>. Для WordPress обычно необходима поддержка правил .htaccess (AllowOverride FileInfo или эквивалент, иногда All по требованиям проекта); не включайте All глобально для чужих сайтов. Сохраните конфигурацию и проверьте, что корень соответствует реальному каталогу WordPress.
  3. Проверьте синтаксисОткройте корневой .htaccess сайта в файловом менеджере и сравните правила переписывания с официальным образцом вашей CMS. Проверьте RewriteBase для установки в подкаталоге и наличие RewriteRule на index.php. Перед заменой сохраните исходные правила безопасности и редиректов, не перезаписывайте их целиком шаблоном.
  4. Перезапустите ApacheПосле правок выполните sudo apachectl configtest и при Syntax OK — sudo systemctl reload apache2 (либо httpd на RHEL). Перезапуск всей системы не требуется. Если модуль уже активен, но 404 остаётся, переходите к журналу и настройке постоянных ссылок самой CMS.
  5. Проверьте журналВ журнале Apache ищите File does not exist, AH... и путь реального файла при запросе ЧПУ. В WordPress откройте «Настройки → Постоянные ссылки» и нажмите «Сохранить». Проверьте две записи и действительно отсутствующий URL: ошибка 404 для несуществующей страницы должна сохраниться.

#Включение модуля

Debian/Ubuntu: sudo a2enmod rewrite и sudo systemctl restart apache2. CentOS/RHEL: убедитесь, что в httpd.conf есть строка LoadModule rewrite_module modules/mod_rewrite.so, и перезапустите sudo systemctl restart httpd. Проверьте список модулей: apachectl -M | grep rewrite.

#AllowOverride

В конфигурации виртуального хоста для каталога сайта укажите <Directory /var/www/site> AllowOverride All Require all granted </Directory>. Без AllowOverride All файл .htaccess игнорируется. Проверка синтаксиса: apachectl configtest. Файл .htaccess должен лежать в корне сайта и называться точно так.

#Проверка правил

Минимальный пример: RewriteEngine On, RewriteCond %{REQUEST_FILENAME} !-f, RewriteCond %{REQUEST_FILENAME} !-d, RewriteRule ^(.*)$ index.php [L,QSA]. Журнал ошибок /var/log/apache2/error.log покажет проблемы. Для отладки включите LogLevel alert rewrite:trace3. Документация: httpd.apache.org.

Linux · Терминал (Bash)КомандаНужен sudo
Включение mod_rewrite в Debian/Ubuntu.
sudo apache2ctl -M | grep rewrite
sudo apache2ctl configtest
# После успешного теста: sudo systemctl reload apache2

#Типичные причины 404 и 500 после включения

Ошибка 500 после добавления .htaccess чаще всего означает синтаксическую ошибку или недоступную директиву: журнал error.log указывает строку. Ошибка 404 на всех, кроме главной, страницах — не включён AllowOverride или используется RewriteBase с неверным путём. Если сайт лежит в подкаталоге, укажите RewriteBase /подкаталог/. В WordPress пересоздайте правила, сохранив «Настройки → Постоянные ссылки». Проверьте, что нет конфликта с правилами в основной конфигурации Apache и что Apache запущен под пользователем, имеющим право читать .htaccess.

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

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

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