#Суть неисправности и признаки
В редакторе блоков WordPress текст набран, но нажатие «Сохранить» или «Опубликовать» заканчивается ошибкой запроса к /wp-json/wp/v2/posts/... с HTTP 401. При этом обычная публичная страница может открываться. Код 401 означает, что сервер не признал запрос авторизованным, но источник ответа нужно определить по содержимому и заголовкам. Нельзя автоматически считать 401 неисправностью REST API WordPress: его может вернуть защитный прокси, правило доступа, внешняя авторизация либо сам WordPress при отсутствии корректной авторизации. Сохраните черновик локально перед повторными попытками.
#Почему возникает проблема
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Истёк сеанс или отсутствует служебный токен RESTРедактор использует cookie входа и X-WP-Nonce. После долгого простоя токен или сеанс становятся неактуальными. | Повторный вход на том же домене помогает; в ответе JSON ошибка rest_not_logged_in или иной код авторизации. | Проверить адрес входа, войти заново, создать новую вкладку редактора. |
| Запрос перехватывает WAF, CDN или базовая HTTP-авторизацияСетевой фильтр может требовать отдельную авторизацию или блокировать POST на /wp-json/. | Вместо JSON приходит HTML с формой входа, страница 401 от прокси или заголовок WWW-Authenticate. | Определить уровень блокировки по вкладке «Сеть» и журналам. |
| Cookie принадлежат другому домену или протоколуwww и без www, http и https или перенаправление между доменами меняют контекст авторизации. | Админка открыта на одном имени, а REST запрос уходит на другое. | Сверить адрес WordPress и адрес сайта, правила прокси. |
| Конфликт дополнения авторизацииПосле обновления появился фильтр REST API или запрет для ролей пользователей. | На тестовой копии проблема исчезает после отключения конкретного расширения. | Проверить дополнения по одному на тестовой копии. |
#Пошаговая диагностика и устранение
- Сохраните текст до диагностикиЕсли кнопка сохранения не работает, выделите содержимое записи в редакторе и скопируйте в локальный текстовый документ; для блоков со сложной вёрсткой дополнительно используйте меню редактора с режимом копирования блоков. Не закрывайте текущую вкладку, пока не сохранили текст. Зафиксируйте время сбоя, адрес записи и дословное сообщение. Это предотвращает потерю изменений при повторной авторизации.
- Определите, какой запрос получает 401В браузере Chrome/Edge откройте редактор и нажмите F12 → «Сеть» (Network). Включите сохранение журнала (Preserve log) при необходимости, повторите «Сохранить» и выберите красную строку с /wp-json/ или ?rest_route=. Посмотрите «Заголовки» → Request URL, Status Code и «Ответ». Запишите код ошибки внутри JSON, но не копируйте в отчёт cookie, X-WP-Nonce, Authorization. Если 401 относится к другой службе, исследуйте именно её, а не настройки REST.
- Проверьте обычную работу REST без авторизацииВ новой вкладке того же браузера откройте https://ВАШ-ДОМЕН/wp-json/ (замените домен своим). Должен появиться JSON со сведениями о доступных маршрутах; это не проверка прав на редактирование. Если вместо него 401, 403, перенаправление на форму входа или HTML, сфотографируйте ответ и сначала проверьте фильтр запросов и настройки сервера. Не публикуйте доступ к закрытым маршрутам ради теста.
- Обновите сеанс безопасноВ отдельной вкладке перейдите по правильному адресу /wp-admin/, проверьте имя пользователя в верхнем меню, при необходимости выполните выход и вход. Вернитесь в редактор, обновите его страницу только после сохранения текста из первого шага. Создайте короткий тестовый черновик и сохраните его: если сохранился, причина была временной авторизацией; если 401 повторился, продолжайте диагностику.
- Сверьте домен и HTTPSВ админке откройте «Настройки» → «Общие» и посмотрите «Адрес WordPress (URL)» и «Адрес сайта (URL)». Сравните их со строкой браузера и Request URL из шага 2: проверьте www, протокол HTTPS и нестандартный каталог установки. При несовпадении не меняйте адреса наугад: сначала сохраните значения и проверьте схему перенаправлений и доверие к обратному прокси; некорректная правка может закрыть доступ в админку.
- Проверьте права пользователя и защитные дополненияОткройте «Пользователи» → «Все пользователи» и убедитесь, что у вашей учётной записи есть роль, позволяющая редактировать именно эту запись. На тестовой копии сайта, после резервной копии, по одному проверяйте недавно обновлённые плагины авторизации, безопасности и REST, фиксируя результат каждого включения. На рабочем сайте не отключайте защиту целиком: просите администратора проверить соответствующее правило только для конкретного запроса.
- Сопоставьте ответ с журналамиВ панели хостинга найдите журналы доступа и ошибок нужного сайта. По времени сбоя отыщите POST к /wp-json/wp/v2/posts/... и его HTTP-код; при прокси/WAF дополнительно изучите идентификатор правила в его журнале. Если журнал Nginx показывает 401, а PHP до запроса не дошёл, исправлять WordPress-плагины бессмысленно. Если WordPress вернул JSON с сообщением о правах, проверьте роль и серверные cookie.
- Повторите сохранение и зафиксируйте исправлениеПосле одного точечного исправления откройте редактор в обычной авторизованной вкладке, измените тестовый черновик, нажмите «Сохранить» и обновите страницу. Убедитесь, что изменение сохранилось и POST завершился кодом 200/201, а не 401. Если ошибка повторяется, верните прежние настройки, сохраните обезличенные журналы и точный код из JSON для поддержки хостинга или разработчика расширения.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаВ терминале Linux/Mac либо PowerShell с curl проверьте только заголовки публичного REST-адреса, заменив example.com на свой домен. Не добавляйте cookie или пароли. HTTP 200/301/401 сам по себе ещё не доказывает проблему с сохранением записи; сравните с браузером.
curl -I https://example.com/wp-json/
#Как проверить результат и что делать, если не помогло
Успех означает, что после обновления вкладки тестовый черновик содержит новый текст и запрос сохранения больше не отвечает 401. Если в сетевом журнале есть rest_cookie_invalid_nonce с HTTP 403, это отдельный вариант сбоя служебного токена; не называйте его ошибкой 401. Передайте специалисту URL маршрута без параметров авторизации, время и тело ответа без секретов.