WordPress LinuxWeb

WordPress: 404 на записях и страницах после смены ЧПУ

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

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

После смены ЧПУ WordPress отдаёт 404 на записях и страницах, когда не работает перезапись URL: отсутствует .htaccess, выключен mod_rewrite, AllowOverride None в Apache или нет try_files в nginx. Сохраните постоянные ссылки и проверьте конфигурацию сервера.

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

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

Сообщение
404 на страницах

WordPress формирует красивые адреса вида /novost/ на основе правил перезаписи: сервер должен передавать любой несуществующий путь в index.php. Если этого не происходит, сервер сам ищет такой файл и отвечает 404 — при этом главная страница открывается, а внутренние нет. Правила в Apache берутся из .htaccess, а в nginx — из блока location / в конфиге.

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

Возможная причинаКак узнатьЧто делать
Устарел или отсутствует .htaccessФайл удалён, не создан из-за прав или содержит неверные правила.В корне сайта нет .htaccess.Сохраните ссылки в админке заново или создайте файл вручную.
Не включён mod_rewriteВ Apache модуль перезаписи отключён.Сайт открывается только с index.php/.sudo a2enmod rewrite.
Нет разрешения AllowOverrideКонфигурация Apache игнорирует .htaccess..htaccess не влияет на сайт.Установите AllowOverride All для каталога сайта.
Nginx без try_filesNginx не знает про правила WordPress.404 от nginx, а не от WordPress.Добавьте try_files $uri $uri/ /index.php?$args;.

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

  1. Пересохраните постоянные ссылкиВойдите в WordPress → «Настройки → Постоянные ссылки», проверьте выбранную структуру и нажмите «Сохранить изменения». Это обновляет внутренние правила; затем откройте одну старую запись, новую запись и главную. Если проблема осталась, определите, какой веб-сервер обрабатывает сайт.
  2. Проверьте наличие .htaccessНа Apache через файловый менеджер проверьте наличие .htaccess в каталоге WordPress. Сохраните копию, проверьте стандартные правила WordPress и связанные правила безопасности; если файл недоступен для записи, WordPress может показать, какие правила нужно добавить вручную.
  3. Включите mod_rewrite и AllowOverrideАдминистратор Apache проверяет apachectl -M | grep rewrite и AllowOverride для конкретного DocumentRoot. Включение модуля зависит от системы; не прописывайте AllowOverride All глобально и не давайте веб-серверу права записи на всю конфигурацию ради одного правила.
  4. Настройте nginxДля Nginx .htaccess не применяется: в конфигурации нужного server проверьте root, передачу PHP в FPM и try_files $uri $uri/ /index.php?$args; с учётом структуры проекта. Выполните nginx -t до reload и проверьте, что изменено именно правило маршрутизации сайта.
  5. Проверьте праваЕсли ошибки сопровождаются 403/500, а не 404, проверьте права на каталог и сообщения error.log (например, namei -l); не применяйте массовый chmod -R 777. Ошибка 404 без сообщений об отказе в правах обычно связана с URL и правилами переписывания.
  6. Отключите плагиныНа тестовом сайте отключите подозрительный плагин перенаправлений или кеширования, если 404 появилась сразу после него. Не отключайте всю защиту на рабочем сайте. После устранения причины проверьте разные шаблоны ссылок и убедитесь, что несуществующий URL действительно возвращает HTTP 404.

#Как понять, кто отвечает 404

Откройте несуществующий адрес, например /proverka-404/. Если страница оформлена темой сайта — 404 выдаёт WordPress, и правила перезаписи работают, а проблема в самой записи (удалена, снят с публикации, изменён слаг). Если вы видите серую страницу «404 Not Found» с подписью nginx или Apache внизу — сервер не передал запрос в index.php, и нужно править конфигурацию. Проверить это можно командой curl -I https://ваш-сайт/proverka-404/: заголовок Server и тело ответа показывают, кто отвечает. На мультисайтах WordPress дополнительно проверьте, что правила для подкаталогов (RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$) не потерялись.

#Файл .htaccess и конфигурация nginx

.htaccess
Стандартные правила WordPress.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
nginx.conf
Блок для nginx.
location / {
    try_files $uri $uri/ /index.php?$args;
}
Linux · Терминал (Bash)КомандаНужен sudo
Включение mod_rewrite в Apache и проверка конфигурации.
apachectl -M | grep rewrite
sudo apachectl configtest
# При необходимости администратор включает mod_rewrite для нужной установки;
# применять проверенную конфигурацию следует по процедуре вашей системы,
# без безусловного restart всего Apache.

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

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

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