#Что означает ошибка
404 на записях
После смены структуры постоянных ссылок WordPress иногда перестаёт открывать записи и страницы: главная работает, а все остальные адреса возвращают 404. Дело в том, что «красивые» адреса работают только благодаря переписыванию (rewrite): веб-сервер должен передавать неизвестные URL в index.php, а WordPress разбирает их сам.
Если правило переписывания отсутствует или не работает, сервер ищет физический файл по этому пути и не находит его. Поэтому исправление зависит от веб-сервера: Apache использует файл .htaccess и модуль mod_rewrite, nginx — директиву try_files в конфигурации сайта.
Пересохраните ссылки и проверьте rewrite/try_files.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет .htaccessФайл. | Проявляется как «404 на записях» или близкий по смыслу сбой. | Создайте. |
| mod_rewriteВыкл. | Проявляется как «404 на записях» или близкий по смыслу сбой. | Включите. |
| Nginx try_filesКонфиг. | Проявляется как «404 на записях» или близкий по смыслу сбой. | Добавьте. |
| ПраваФайл. | Проявляется как «404 на записях» или близкий по смыслу сбой. | Выдайте. |
#Пошаговое решение
- Пересохраните ссылкиВ WordPress откройте «Настройки → Постоянные ссылки», запишите выбранный вариант и нажмите «Сохранить изменения», даже если он не менялся. Затем откройте одну опубликованную запись по её полному адресу. Если главная работает, а все записи дают 404, вероятно, сервер не перенаправляет дружественные адреса в WordPress.
- Проверьте .htaccessНа Apache через SFTP проверьте в корне WordPress наличие
.htaccessи стандартных правил WordPress. Сначала сохраните копию, затем убедитесь, что сервер разрешаетmod_rewriteи обработку.htaccess; на управляемом хостинге уточните это у поддержки. Не заменяйте существующие защитные директивы чужим шаблоном целиком. - Настройте try_filesНа Nginx
.htaccessне используется: администратор проверяетlocation /и корректноеtry_files $uri $uri/ /index.php?$args;с учётом приложения. Сохраните конфигурацию, выполнитеnginx -tи только после успеха примените reload. Повторите проверку записи и несуществующего URL; второй должен возвращать реальный 404, а не чужую страницу.
#Apache и .htaccess
Откройте «Настройки → Постоянные ссылки» и просто нажмите «Сохранить» — WordPress пересоздаст правила в .htaccess. Если файл недоступен для записи, добавьте блок правил вручную. Убедитесь, что включён mod_rewrite, а в конфигурации виртуального хоста для каталога сайта стоит AllowOverride All.
#nginx
В nginx файла .htaccess нет. В блоке location / должна быть строка try_files $uri $uri/ /index.php?$args;. Без неё все «красивые» адреса дают 404. После правки проверьте конфигурацию командой nginx -t и перезагрузите службу.
#Прочие причины
Конфликт плагинов безопасности и кеширования (очистите кэш), права на .htaccess, неверный адрес сайта в настройках, перенос сайта без пересоздания правил, отсутствие модуля rewrite в Apache. Помогает также временное переключение на структуру «Простая» для проверки.
location / { try_files $uri $uri/ /index.php?$args;}Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как проверить результат
Откройте любую внутреннюю страницу и несколько записей, затем страницы рубрик и поиск. Если часть адресов открывается, а часть нет, проверьте, нет ли в плагинах правил редиректов, перехватывающих адреса. В Apache помогает временное переименование .htaccess и повторное сохранение постоянных ссылок: WordPress создаст чистый файл со стандартными правилами.