Если после смены структуры постоянных ссылок в 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.
Практический порядок такой:
- Отключите кеш-плагин и очистите серверный кеш.
- Проверьте плагины безопасности, которые ограничивают
wp-json. - Временно выключите плагины редиректов.
- Сравните результат до и после каждого шага.
Когда проблема в теме или кастомном коде
Если 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, кеша, безопасности и темы. Это короткий тест, который экономит часы поиска по косвенным симптомам.