Apache Linux

Apache: mod_rewrite не работает — 404 при ЧПУ WordPress

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

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

Если после включения ЧПУ в WordPress на Apache появляется 404, проверьте, что включён mod_rewrite, в виртуальном хосте стоит AllowOverride All и в корне сайта есть .htaccess с правилами WordPress, а права файлов верные.

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

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

Сообщение
404 при ЧПУ

Apache берёт правила перезаписи из файла .htaccess, но только если включён модуль mod_rewrite и директива AllowOverride разрешает переопределять настройки в каталоге сайта. Если любое из условий не выполнено, правила игнорируются, Apache ищет файл /novost/ на диске и отвечает 404. Главная страница при этом открывается, а внутренние — нет.

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

Возможная причинаКак узнатьЧто делать
Модуль отключёнmod_rewrite не включён.Команда apachectl -M не показывает rewrite_module.sudo a2enmod rewrite.
AllowOverride NoneКаталог сайта запрещает использование .htaccess.Правила в .htaccess не работают.Поставьте AllowOverride All.
Нет файла .htaccessФайл не создан или удалён.В корне сайта нет .htaccess.Сохраните ЧПУ в WordPress или создайте файл.
Права и владелецWordPress не может записать .htaccess.В админке предлагают вручную добавить правила.Дайте права или создайте файл вручную.

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

  1. Проверьте модульПодключитесь к серверу Apache по SSH и выполните apachectl -M | grep rewrite (или apache2ctl -M). Если rewrite_module есть, модуль активен и включать его повторно не нужно. На Debian/Ubuntu при отсутствии модуля администратор может использовать sudo a2enmod rewrite и проверить конфигурацию.
  2. Включите AllowOverrideВ файле виртуального хоста найдите DocumentRoot и связанный блок <Directory> с AllowOverride. Для сайта WordPress разрешите необходимые директивы .htaccess лишь в его каталоге; не ставьте AllowOverride All глобально для всей файловой системы.
  3. Создайте .htaccessОткройте .htaccess в корне WordPress, сохраните копию и проверьте стандартный блок # BEGIN WordPress вместе с правилами RewriteEngine On и RewriteRule. Если WordPress в подкаталоге, путь может отличаться; не удаляйте остальные правила безопасности и перенаправлений при замене.
  4. Пересохраните постоянные ссылкиВ WordPress войдите «Настройки → Постоянные ссылки», выберите нужную структуру и нажмите «Сохранить изменения». Затем откройте несколько записей: если форма работает, но страницы всё ещё 404, исследуйте фактические правила Apache и статус URL.
  5. Проверьте конфигурациюПосле изменения модуля/виртуального хоста выполните sudo apachectl configtest, убедитесь в Syntax OK, затем sudo systemctl reload apache2 (или httpd на RHEL). Не перезапускайте все службы хостинга ради обычной правки ЧПУ.
  6. Проверьте журналВ error.log Apache найдите ошибки при запросе записи: неправильный DocumentRoot, запрет .htaccess, отсутствие index.php или цикл перезаписи. Исправьте конкретную причину, а не перенаправляйте все 404 на главную; несуществующие страницы должны продолжать возвращать HTTP 404.

#Конфигурация

000-default.conf
Фрагмент виртуального хоста с разрешением .htaccess.
<Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
Linux · Терминал (Bash)КомандаНужен sudo
Включение модуля и перезапуск Apache.
sudo apachectl configtest
# При Syntax OK: sudo systemctl reload apache2
# Для RHEL служба называется httpd.

Если вы используете Apache вместе с nginx в роли прокси, учитывайте, что .htaccess работает только на уровне Apache; запросы, обработанные nginx напрямую (например, статика), правила не затрагивают. Для высоконагруженных сайтов вместо .htaccess лучше размещать правила прямо в конфигурации виртуального хоста — это быстрее. Подробности — в документации Apache.

Проверить, какие правила реально применяются, поможет временная диагностика: добавьте в начало .htaccess строку RewriteRule ^proverka-rewrite$ /index.php [L,R=302] и откройте /proverka-rewrite — редирект сработает только если .htaccess читается и mod_rewrite включён. Если при этом в журнале появляется AH00124: Request exceeded the limit of 10 internal redirects, значит, правила зациклены: проверьте RewriteBase и дубли блока WordPress (после переносов он иногда встречается дважды). На хостингах с PHP как CGI/FPM и nginx перед Apache .htaccess тоже работает, но только в части, которую обслуживает Apache.

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

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

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