Как исправить 404 на wp-json в WordPress после настройки постоянных ссылок

Если после смены структуры постоянных ссылок в WordPress адрес /wp-json/ начал отдавать 404, проблема обычно не в самом REST API, а в правилах перезаписи, сервере или конфликте с плагином/темой. На практике это ломает не только внешние интеграции, но и редактор блоков, предпросмотр, некоторые формы и мобильные клиенты.

Как понять, что сломался именно REST API

Сначала проверьте симптом, а не сразу правьте код. Для REST API важно отличить настоящий 404 от ситуации, когда сервер отдает страницу ошибки, а WordPress при этом жив.

Что проверить в первую очередь

  • Откройте https://ваш-домен/wp-json/ в браузере и посмотрите, есть ли JSON-ответ.
  • Проверьте https://ваш-домен/wp-json/wp/v2/posts — если корень отвечает, а этот маршрут нет, проблема может быть в конкретном endpoint или правах.
  • Посмотрите, не включен ли у вас плагин безопасности, который режет запросы к wp-json.
  • После изменения permalink-структуры зайдите в Настройки → Постоянные ссылки и просто нажмите «Сохранить изменения» без правок.

Если после этого REST API оживает, значит, правила перезаписи не были сброшены. Если нет — идем дальше.

Почему wp-json начинает отдавать 404

Самые частые причины довольно приземленные:

  • не обновились rewrite rules после смены permalink-структуры;
  • сервер не пропускает запросы к /wp-json/ или переписывает их в 404;
  • в .htaccess или конфигурации Nginx есть лишние правила;
  • плагин безопасности, кеширования или редиректов вмешивается в REST-запросы;
  • тема или кастомный код отключают REST API фильтрами.

Важно: если 404 виден только в браузере, но API работает для плагинов, проверьте еще CORS, кэш и редиректы. Иногда проблема маскируется под 404, хотя фактически запрос уходит на другой URL.

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

1. Сбросьте правила перезаписи

Самый безопасный способ — пересохранить постоянные ссылки в админке. Если нужен код, можно сделать это один раз через функцию flush_rewrite_rules(), но не на каждом запросе. Вставлять такой вызов в functions.php без условия нельзя.

add_action('init', function () {
    if (get_option('my_flush_rewrite_rules_once') === '1') {
        flush_rewrite_rules();
        update_option('my_flush_rewrite_rules_once', '0');
    }
});

Такой подход используют только как временную меру для диагностики. После проверки флаг нужно убрать или сбросить вручную.

2. Проверьте, не отключен ли REST API фильтром

Иногда в теме или плагине встречается код, который блокирует REST API для всех или части пользователей. Ищите фильтры rest_authentication_errors и похожие проверки. Если у вас есть кастомный код, временно отключите его и проверьте /wp-json/ снова.

add_filter('rest_authentication_errors', function ($result) {
    if (!empty($result)) {
        return $result;
    }

    if (is_user_logged_in()) {
        return $result;
    }

    return $result;
});

Этот пример не блокирует API, а показывает, как выглядит точка, где часто ошибаются. Если у вас там стоит возврат new WP_Error(...) для всех гостей, это и есть причина 404/403 в интерфейсе.

3. Сверьте конфигурацию сервера

Для Apache в корне сайта должен быть стандартный блок WordPress в .htaccess. Для Nginx нужны корректные правила try_files. Если сервер не передает запросы в index.php, WordPress не сможет обработать маршрут /wp-json/.

Пример базовой логики для Nginx:

location / {
    try_files $uri $uri/ /index.php?$args;
}

Если у вас кастомная схема, проверьте, не перехватывает ли отдельный location путь /wp-json/ и не отправляет ли его в статический 404.

4. Отключите конфликтующие плагины по очереди

Особенно часто мешают плагины кеша, редиректов, безопасности и SEO. Не надо выключать все подряд на боевом сайте без плана: сначала сделайте копию или проверьте на staging.

Практический порядок такой:

  1. Отключите кеш-плагин и очистите серверный кеш.
  2. Проверьте плагины безопасности, которые ограничивают wp-json.
  3. Временно выключите плагины редиректов.
  4. Сравните результат до и после каждого шага.

Когда проблема в теме или кастомном коде

Если REST API ломается только на активной теме, ищите прямые вмешательства в маршрутизацию. Частая ошибка — разработчик добавляет фильтр, который меняет запросы, не учитывая REST.

Проверьте, нет ли в теме таких паттернов:

  • жесткая обработка template_redirect с редиректом на 404;
  • условия, которые отключают wp-json для гостей;
  • переопределение rest_url без понимания последствий;
  • кастомные rewrite rules, которые перекрывают путь wp-json.

Если код писался давно, проще временно переключиться на стандартную тему и проверить, исчезает ли ошибка. Это быстрее, чем искать проблему в десятках файлов шаблона.

Сравнение подходов: плагин, код или серверная правка

ПодходКогда подходитМинус
Сброс permalink в админкеПосле смены структуры ссылок или миграцииНе помогает, если проблема в сервере или фильтрах
Проверка и отключение конфликтующего плагинаЕсли 404 появился после установки кеша, безопасности или редиректовНужно тестировать по одному компоненту
Правка .htaccess / NginxЕсли сервер не пропускает запросы в WordPressТребует доступа к конфигурации и аккуратности

Как проверить, что решение сработало

После исправлений не ограничивайтесь открытием главной страницы. Проверьте именно REST-маршруты и поведение редактора.

  • Откройте /wp-json/ и убедитесь, что ответ — JSON, а не HTML-страница 404.
  • Проверьте /wp-json/wp/v2/posts и любой публичный endpoint.
  • Откройте редактор записей и убедитесь, что блоки подгружаются без ошибок в консоли.
  • Если используете внешнюю интеграцию, повторите ее запрос после очистки кеша.
  • Посмотрите логи сервера: там не должно быть повторяющихся 404 на /wp-json/.

Частые ошибки и как их исправить

Сохранили постоянные ссылки, но не помогло

Значит, проблема не в rewrite rules. Смотрите сервер, плагин безопасности или кастомный код, который режет REST-запросы.

Отключили REST API полностью

Это ломает редактор блоков и интеграции. Полное отключение редко оправдано. Если нужна защита, ограничивайте доступ точечно, а не рубите весь API.

Поставили кеш, но забыли исключить wp-json

Некоторые кеширующие решения не должны хранить ответы REST API как обычные страницы. Проверьте исключения для /wp-json/ и очистите кеш после изменений.

Правили .htaccess вручную и потеряли стандартный блок WordPress

Верните базовые правила WordPress и проверьте, не перезаписывает ли их другой плагин или панель хостинга.

Что сделать, чтобы проблема не вернулась

Если у вас часто меняются плагины и правила редиректов, держите отдельный staging-сайт и проверяйте там все изменения, связанные с permalink, кешем и безопасностью. Для регулярной технической чистки и контроля дублей полезно использовать инструменты вроде Clearfy Pro, но только как часть общей настройки, а не как замену диагностике сервера.

Главное правило простое: /wp-json/ должен проверяться после любой правки permalink, кеша, безопасности и темы. Это короткий тест, который экономит часы поиска по косвенным симптомам.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как отключить дубли архивов в WordPress и не сломать индексацию
13.09.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее
Warning: Trying to access array offset on value of type null in /home/s/serkae7j/wpshop.ru/public_html/tools/widget/event.php on line 399 Warning: Trying to access array offset on value of type null in /home/s/serkae7j/wpshop.ru/public_html/tools/widget/event.php on line 400