#Почему появляется 404
Главная страница открывается, а записи и страницы дают «404 Not Found». Причина в правилах перезаписи URL: WordPress ожидает, что веб-сервер будет передавать все несуществующие пути в index.php. Если правила в .htaccess отсутствуют, mod_rewrite отключён, в Apache запрещено AllowOverride, или в nginx нет директивы try_files, сервер ищет физический файл и сообщает, что страницы нет. Проблема часто возникает после переноса сайта, смены хостинга или сброса настроек ссылок.
#Причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет правил перезаписи.htaccess потерян. | Все внутренние страницы 404. | Пересохраните ссылки. |
| Выключен mod_rewriteНе активен модуль. | Правила не работают. | Включите модуль. |
| AllowOverride NoneApache игнорирует .htaccess. | Содержимое файла не действует. | AllowOverride All. |
| Нет try_files в nginx.htaccess не читается. | 404 от nginx. | Добавьте правило. |
| Конфликт плагинаСвои правила. | После включения плагина 404. | Отключите плагин. |
| Неверный каталог или адрес сайтаПеренос. | Страницы ведут не туда. | Исправьте siteurl. |
#Порядок
- Сохраните настройки постоянных ссылок в WordPressВойдите в
/wp-admin/→ «Настройки → Постоянные ссылки», перепишите выбранную структуру и нажмите «Сохранить изменения», даже если шаблон не меняли. Откройте одну проблемную запись и главную страницу в приватной вкладке. Если записи начали открываться, ошибка была связана с правилами маршрутизации; не меняйте адреса записей по одной. - Проверьте правила .htaccess на Apache и try_files на NginxОпределите веб-сервер: в панели хостинга откройте сведения о сайте или обратитесь к администратору. Для Apache проверьте, что в корне WordPress есть
.htaccessс правилами именно WordPress и что их применение разрешено соответствующимAllowOverride; для Nginx.htaccessне используется, нужна корректная директиваtry_files. Сохраните существующие правила прежде чем заменять. - Проверьте mod_rewrite и AllowOverride в ApacheНа Apache администратор проверяет
apachectl -M | grep rewriteи применяемый<Directory>для WordPress; при отсутствии модуля/разрешения согласует включение. Для Nginx проверьтеsudo nginx -Tи соответствиеrootиtry_files $uri $uri/ /index.php?$args;логике сайта. Не копируйте этот пример в конфигурацию, где используется нестандартный фронт-контроллер. - Сверьте адреса и пути установки WordPressЕсли WordPress установлен в подкаталог или за обратным прокси, сверьте «Настройки → Общие» (
Адрес WordPressиАдрес сайта) с фактическим путём и HTTPS. Изменение этих адресов может лишить входа в админку, поэтому сделайте копию базы иwp-config.phpи подготовьте способ возврата. - Проверьте конфликтующие плагины и правила перенаправленияПроверьте, не перехватывают ли URL плагины перенаправлений, безопасности, кеширования и правила CDN. На стенде по одному отключайте недавно изменённые плагины, записывая эффект. Не отключайте защиту действующего сайта без плана доступа; сначала сравните журналы с точным адресом 404.
- Проверьте состояние и адрес конкретной записиЕсли 404 выдаёт только одна запись, откройте её в редакторе и убедитесь, что она опубликована, а адрес не конфликтует со страницей или таксономией. Проверьте статус в «Записи → Все записи» и сохраните ссылку, не меняя массово slug других материалов.
- Проверьте конфигурацию веб-сервера и откройте несколько страницПосле правки конфигурации веб-сервера выполните проверку синтаксиса (
nginx -tилиapachectl configtest) и перезагрузите конфигурацию, затем проверьте главную, пару старых и новых ЧПУ и служебную страницу/wp-admin/. Если проблема остаётся, сохраните HTTP-код, URL, журнал и конфигурацию маршрутизации. - Убедитесь, что отсутствующая страница возвращает HTTP 404Убедитесь, что WordPress выдаёт собственную страницу 404 для действительно несуществующего URL, а не ответ 200 на всё подряд. Это полезно и для безопасности, и для индексирования; избегайте правил, которые автоматически направляют на главную любой ошибочный адрес.
- Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Особенности мультисайта и подкаталога
Если WordPress установлен в подкаталог (/blog/), в .htaccess значение RewriteBase и последнее правило должны содержать этот путь: RewriteBase /blog/ и RewriteRule . /blog/index.php [L]. Для мультисайта правила другие: скопируйте блок из «Сеть → Настройка сети». Если используется кеширующий плагин, после смены ссылок очистите его кеш, иначе посетители будут видеть старые 404.