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