Как отключить wp-json?

После последнего обновления Яндекса я совершенно случайно обнаружил, что у меня на сайте https://prostolinux.ru/ в индексе появилась ТЫСЯЧА новых страниц! Я не мог написать столько статей за пару недель между АПами и поэтому это было НЕНОРМАЛЬНО.

Яндекс Вебмастер показывал мне источник проблемы - раздел /wp-json/ на сайте. Но на практике такой папки на сайте не оказалось, и я понял, что придется попотеть.

wp-json что это

У меня уже был опыт с удалением дорвеев, которые мне заливали на сайты злобные хакеры, и тут я подумал, что опять мне кто-то подсунул какую-то гадость.

При заходе на адрес https://prostolinux.ru/wp-json я получал страницу с таким кодом:

{"name":"\u041f\u0440\u043e LINUX, SOFT \u0438 HARDWARE.","description":"\u041f\u0440\u043e\u0441\u0442\u043e \u043e Linux, SEO \u0438 FOREX.","url":"http:\/\/prostolinux.ru","namespaces":["oembed\/1.0"],"authentication":[],"routes":{"\/":{"namespace":"","methods":["GET"],"endpoints":[{"methods":["GET"],"args":{"context":{"required":false,"default":"view"}}}],"_links":{"self":"http:\/\/prostolinux.ru\/wp-json\/"}},"\/oembed\/1.0":{"namespace":"oembed\/1.0","methods":["GET"],"endpoints":[{"methods":["GET"],"args":{"namespace":{"required":false,"default":"oembed\/1.0"},"context":{"required":false,"default":"view"}}}],"_links":{"self":"http:\/\/prostolinux.ru\/wp-json\/oembed\/1.0"}},"\/oembed\/1.0\/embed":{"namespace":"oembed\/1.0","methods":["GET"],"endpoints":[{"methods":["GET"],"args":{"url":{"required":true},"format":{"required":false,"default":"json"},"maxwidth":{"required":false,"default":600}}}],"_links":{"self":"http:\/\/prostolinux.ru\/wp-json\/oembed\/1.0\/embed"}}},"_links":{"help":[{"href":"http:\/\/v2.wp-api.org\/"}]}}

В эту страницу была вложена другая и так более 1000 страниц как то насобиралось. Хорошо, что Яндекс не успел их проиндексировать, а он бы это сделал, так как у него в индексе уже полно таких сайтов с такими мусорными страницами:

wp-json

Но как это Яндекс так быстро нашел все эти страницы? Оказалось все просто: в шапке сайта (посмотрел исходный код страницы, в header.php этого нет) болтались три замечательные ссылки на всю эту ерунду, да еще и с картой XML для ЛУЧШЕГО индексирования!

<link rel='https://api.w.org/' href='https://prostolinux.ru/wp-json/' />
<link rel="alternate" type="application/json+oembed" href="https://prostolinux.ru/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fprostolinux.ru%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://prostolinux.ru/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fprostolinux.ru%2F&#038;format=xml" />

Как удалить ссылки link rel?

Первое, на что у меня хватило ума - это удалить эти ссылки. Для этого в function.php  прописал немного кода. Нашел это на англоязычном сайте, там уже пошла паника по этому поводу и кто-то предложил такой способ решения проблемы:

remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'rest_output_link_wp_head' );
remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );

Но проблема до конца не была решена, хотя ссылки пропали, сами виртуальные страницы остались. Немного покопавшись в интернете я нашел решение этого вопроса у одного известного блогера.

WP-json что это?

Как оказалось, проблема была в новой версии WordPress. Начиная в версии 4.4 они ввели новый API REST, который наплодил у всех кучу мусорных страниц в виртуальной директории wp-json.

Читайте также:  Как закрыть от индексации счетчик liveinternet?

Решить вопрос можно просто, отключив опять же все это через function.php, добавив туда кучу кода:

// Отключаем сам REST API
 add_filter('rest_enabled', '__return_false');
// Отключаем фильтры REST API
 remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' );
 remove_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );
 remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );
 remove_action( 'auth_cookie_malformed', 'rest_cookie_collect_status' );
 remove_action( 'auth_cookie_expired', 'rest_cookie_collect_status' );
 remove_action( 'auth_cookie_bad_username', 'rest_cookie_collect_status' );
 remove_action( 'auth_cookie_bad_hash', 'rest_cookie_collect_status' );
 remove_action( 'auth_cookie_valid', 'rest_cookie_collect_status' );
 remove_filter( 'rest_authentication_errors', 'rest_cookie_check_errors', 100 );
// Отключаем события REST API
 remove_action( 'init', 'rest_api_init' );
 remove_action( 'rest_api_init', 'rest_api_default_filters', 10, 1 );
 remove_action( 'parse_request', 'rest_api_loaded' );
// Отключаем Embeds связанные с REST API
 remove_action( 'rest_api_init', 'wp_oembed_register_route' );
 remove_filter( 'rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4 );

Все, теперь все мусорные страницы исчезли и если зайти по любому из этих адресов, то нас перебросит на главную страницу сайта. (Для большей точности скопируйте код лучше отсюда)

Как оказалось, я только этот сайт обновил до версии 4.4 и поэтому у других моих проектов таких проблем нет. Я пока не буду их обновлять и вам не советую, а если вы уже это сделали, то добавьте приведенный в статье код в function.php, чтобы избежать проблем.

Еще очень полезно установить на сайт три плагина: Disable WordPress Core Updates, Disable WordPress Plugin Updates и Disable Theme Updates.

Как вы поняли из этой статьи, береженого берегут эти плагины и изучение Яндекс Вебмастера после каждого АПа....

93 комментариев уже оставлено!

Опубликовано © Блокнот вебмастера

Статью прочитало 5 333 человек(а) , сегодня - 15 ...