WordPress XML-RPC 403 и 404: как отключить, проверить и не сломать доступ к сайту

Если в логах или в браузере вы видите /xmlrpc.php с ответом 403 или 404, это не всегда ошибка ядра WordPress. Чаще всего так проявляется либо защита на уровне сервера, либо отключение XML-RPC в плагине безопасности, либо правила в .htaccess / nginx. Проблема в том, что один и тот же симптом может означать разные вещи: где-то XML-RPC действительно нужно закрыть, а где-то вы случайно поломали мобильное приложение, Jetpack или внешнюю интеграцию.

Ниже — практический разбор: как понять, что именно блокирует XML-RPC, когда его можно отключать, чем заменить старые сценарии, и как проверить, что после правки сайт не потерял нужные подключения.

Когда XML-RPC вообще нужен

XML-RPC — старый интерфейс WordPress для удалённых запросов. Он до сих пор встречается в трёх типичных сценариях:

  • мобильное приложение WordPress;
  • Jetpack и некоторые связанные сервисы;
  • сторонние публикации и интеграции, которые до сих пор не переведены на REST API.

Если у вас обычный сайт без внешней публикации и без старых интеграций, XML-RPC чаще всего не нужен. Но отключать его стоит осознанно: сначала убедитесь, что никто из команды и никаких сервисов не использует его для входа, публикации или синхронизации.

Диагностика: что именно даёт 403 или 404

Первый шаг — не править код, а понять источник ответа. Один и тот же 403 может прийти от WordPress, от плагина безопасности, от nginx, от Apache или от WAF/CDN. 404 тоже бывает разным: файл отсутствует физически, запрос переписан, либо сервер специально маскирует наличие XML-RPC.

Проверка с сервера и из браузера

Сначала посмотрите заголовки ответа. Это помогает понять, кто именно отвечает на запрос.

curl -I https://example.com/xmlrpc.php

Если вы видите заголовки, характерные для nginx, Cloudflare или другого прокси, проблема может быть не в WordPress. Если ответ идёт от самого сайта, дальше проверяйте плагины и правила в конфигурации.

Что искать в логах

Полезно посмотреть:

  • access log веб-сервера — есть ли запросы к /xmlrpc.php и какой код ответа;
  • error log — нет ли сообщений о блокировке по правилам безопасности;
  • логи плагина безопасности — многие из них пишут отдельные события о запрете XML-RPC.

Если в логах есть 403 с пометкой плагина, значит блокировка сделана на уровне WordPress. Если в логах вообще нет следов запроса, возможно, его режет внешний фильтр до попадания в PHP.

Как отключить XML-RPC безопасно

Есть три рабочих подхода: плагин безопасности, правило на сервере или код в теме/мини-плагине. Для продакшена лучше выбирать тот вариант, который соответствует вашей архитектуре и не ломает обновления.

Подход Когда уместен Плюсы Минусы
Плагин безопасности Нужно быстро закрыть XML-RPC без правок сервера Просто включить, легко откатить Зависимость от плагина, лишняя нагрузка
Правило на сервере Есть доступ к nginx/Apache и нужен жёсткий запрет Блокировка до PHP, меньше нагрузки Нужно аккуратно сопровождать конфиг
Код в мини-плагине Нужен точечный контроль внутри WordPress Прозрачная логика, можно версионировать Если сделать в теме, потеряется при смене темы

Вариант 1: отключение через код

Если вам нужен управляемый вариант без стороннего плагина, добавьте фильтр в мини-плагин или mu-plugin. Это не удаляет файл xmlrpc.php, но запрещает его использование на уровне WordPress.

<?php
/**
 * Plugin Name: Disable XML-RPC
 */

add_filter( 'xmlrpc_enabled', '__return_false' );

Такой способ подходит, если вы хотите быстро остановить XML-RPC и при этом оставить возможность включить его обратно без правок сервера.

Вариант 2: блокировка на уровне nginx

Если сайт работает на nginx и XML-RPC точно не нужен, лучше закрыть его до передачи запроса в PHP:

location = /xmlrpc.php {
    deny all;
    access_log off;
    log_not_found off;
}

Это снижает лишнюю нагрузку и убирает шум в логах. Но перед применением проверьте, что у вас нет интеграций, которым этот файл нужен.

Вариант 3: блокировка в Apache

Для Apache можно использовать правило в .htaccess:

<Files xmlrpc.php>
    Require all denied
</Files>

Если сайт за прокси или CDN, убедитесь, что блокировка не конфликтует с внешними правилами. Иначе получите ситуацию, когда вы отключили XML-RPC в двух местах, а потом долго ищете, кто именно отдаёт 403.

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

После изменения проверьте не только код ответа, но и побочные эффекты. Нужен именно рабочий контроль, а не визуальная проверка в админке.

  • выполните curl -I https://example.com/xmlrpc.php и убедитесь, что ответ соответствует выбранной политике;
  • проверьте логи на отсутствие новых обращений к XML-RPC с ошибками;
  • если используется Jetpack, мобильное приложение или внешняя публикация, протестируйте их отдельно;
  • посмотрите, не выросло ли число 404/403 на уровне WAF или CDN после изменения;
  • убедитесь, что сайт не начал отдавать лишние ошибки в консоли мониторинга.

Если вы отключали XML-RPC ради безопасности, полезно проверить ещё и сценарий brute force: многие боты используют этот endpoint для массовых попыток авторизации. После блокировки таких запросов в логах должно стать заметно меньше.

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

Отключили XML-RPC, а потом перестал работать Jetpack

Это ожидаемо: Jetpack в ряде сценариев использует XML-RPC для связи с сайтом. Решение простое — либо вернуть доступ, либо перевести нужную задачу на другой механизм, если он поддерживается конкретным сервисом.

Поставили плагин безопасности и забыли, где именно блокировка

В итоге админ видит 403, а разработчик ищет проблему в .htaccess. Чтобы не путаться, фиксируйте место изменения: в тикете, в README проекта или хотя бы в комментарии к мини-плагину.

Скрыли XML-RPC через 404, но не убрали нагрузку

Если ответ маскируется на уровне WordPress, запрос всё равно может доходить до PHP. Для высоконагруженного сайта лучше закрывать endpoint на уровне веб-сервера или WAF.

Сделали правило в теме

Это типичная ошибка. При смене темы защита исчезнет. Для таких настроек используйте мини-плагин или mu-plugin, а не файл темы.

Практические советы по безопасности и производительности

Если XML-RPC не нужен, его лучше закрыть не только из соображений безопасности, но и ради чистоты инфраструктуры. Меньше лишних запросов — меньше шума в логах и меньше поводов для автоматических блокировок.

  • не дублируйте блокировку в трёх местах без необходимости;
  • не отключайте XML-RPC, пока не проверили внешние интеграции;
  • если сайт под атакой, сначала ограничьте endpoint на сервере, а потом уже разбирайтесь с плагинами;
  • для постоянной защиты лучше хранить правило в конфигурации, а не в ручных правках админки.

Если вам нужно одновременно почистить сайт от лишних технических хвостов, отключить дубли и упростить SEO-настройки, иногда удобнее вынести часть таких задач в отдельный инструмент вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже в этом случае важно понимать, что именно отключается и где это хранится.

Мини-чек-лист перед выкладкой на продакшен

  • Проверен список сервисов, которые могут использовать XML-RPC.
  • Выбран один основной способ блокировки, без дублирования правил.
  • Сделан тест curl -I с ожидаемым кодом ответа.
  • Проверены логи веб-сервера и плагинов безопасности.
  • Подтверждено, что Jetpack или другие интеграции не сломались.
  • Изменение зафиксировано в документации проекта.

Если задача была именно в том, чтобы убрать лишний доступ к xmlrpc.php, после этих проверок вы уже будете понимать, что блокировка работает не только формально, но и по факту. А если 403 или 404 продолжает появляться в неожиданных местах, значит источник ответа нужно искать выше по цепочке: CDN, WAF, серверный конфиг или сторонний security-плагин.

WordPress XML-RPC 403 и 404: как отключить, проверить и не сломать доступ к сайту
20.09.2026
Почему REST API WordPress возвращает 403 при запросах с Authorization header
12.09.2026
Как убрать дубли title, description и canonical в WordPress
16.09.2026
×
Прокачай свой сайт WordPress!

WordPress

-20% на премиум темы и плагины

Создай сайт своей мечты ⋙