关于WordPress站点健康提示REST API错误及解决办法

关于WordPress站点健康提示REST API错误及解决办法

首先我们开看看什么是REST API?

WordPress REST API为WordPress数据类型提供API端点,允许开发人员通过发送和接收JSON(JavaScript对象符号)对象远程与站点进行交互。 JSON是一种开放标准的数据格式,它是轻量级和可读的,看起来像是在JavaScript中的对象; 由此得名。 当您向API发送内容或发出请求时,将以JSON返回响应。 这使开发人员能够从客户端JavaScript或外部应用程序创建,阅读和更新WordPress内容,甚至是用PHP语言编写的内容。

简单的说就是通过这个 REST API 可以很轻松的获取网站的数据,可应用于其他网站、手机 APP 或小程序等;但对于一般的网站是没有需要的,反而会拖累网站的速度,而且 REST API 采用 GET 请求方式,这就为 DDOS 攻击提供了一个新的攻击途径,所以我们应尽可能的禁止掉这些不必要的功能需求,并且去掉 head 里面输出 wp-json 链接。

关于WordPress站点健康提示REST API错误及解决办法

既然他报错了,我们先来看看接口是否正常开启。查看 WP JSON REST API 是否开启的方法:

http://域名/wp-json/,若输出数据则是开启状态。

关于WordPress站点健康提示REST API错误及解决办法

有数据输出说明接口正常开启,由于我们用不到REST API接口,所以接下来我们需要关闭这个功能。如果我们想兼容所有版本的 WordPress,我们可以直接使用插件Disable REST API或Disable WP REST API来完全禁用 REST API;但我更倾向纯代码的方法,在这里就介绍下代码版兼容所有 WordPress 版本的完全禁用 REST API 或者说移除 head 里面 wp-json 链接的方法。

将下面的代码添加到当前主题函数模板 functions.php 中:

/*
 * 屏蔽 REST API
 */
add_filter('json_enabled', '__return_false');
add_filter('json_jsonp_enabled', '__return_false');
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
// 移除头部wp-json标签与HTTP header中的link
remove_action('wp_head', 'rest_output_link_wp_head', 10);
remove_action('template_redirect', 'rest_output_link_header', 11);
add_filter('rest_authentication_errors', 'demo_disable_rest_api');
function demo_disable_rest_api($access)
{
    return new WP_Error('rest_disabled', __('The REST API on this site has been disabled.'), ['status' => rest_authorization_required_code()]);
}

我们再来看看WP JSON REST API 是否已经关闭。

关于WordPress站点健康提示REST API错误及解决办法

如图WP JSON REST API已经成功关闭了

关闭接口之后我们会发现在健康状态栏依然会有这2个报错。没关系,我们继续!

站点健康功能,用于了解当前网站运行中有哪些问题需要改进,位置在WP后台→工具→站点健康。
该功能源自 Site Health Tool Manager 插件,也就是插件的简化版。

为什么要集成网站健康检测功能,据说是为开发人员方便测试,有人说很有用,个人认为没有任何用处,暴露主机环境信息,另外不知道这玩意是否经常自己在后台偷偷运行检测,还是打开后再执行检测,试过一次就再也不想打开。

可以通过下面的方法有选择性地禁止某些项目检测或者禁止全部项目检测。

将下面的代码添加到当前主题函数模板 functions.php 中:

//禁用 PHP 版本检测,示例:
function prefix_remove_site_health( $tests ) {
    unset( $tests['direct']['php_version'] );//禁止PHP检测
    return $tests;
}
add_filter( 'site_status_tests', 'prefix_remove_site_health' );

通过site_status_tests过滤器,返回时触发WP_Site_Health::get_tests()

注:$tests是一个数组。包括$tests['direct']$tests['async'],在加载站点健康状态之前,直接测试在 PHP 中运行,并且在页面加载之后通过 Ajax 调用触发异步测试。

禁用更多功能检测请对照: /wp-admin/includes/class-wp-site-health.php

unset( $tests['direct']['php_version'] );//禁止PHP检测
 
unset( $tests['direct']['wordpress_version'] );//禁止程序版本检测
 
unset( $tests['direct']['plugin_version'] );//禁止插件版本检测

一行一个,以此类推。

禁止全部代码:

/*
 * 屏蔽 健康状态检测
 */
function prefix_remove_site_health( $tests ) {
    unset( $tests['direct']['php_version'] );
    unset( $tests['direct']['wordpress_version'] );
    unset( $tests['direct']['plugin_version'] );
    unset( $tests['direct']['theme_version'] );
    unset( $tests['direct']['sql_server'] );
    unset( $tests['direct']['php_extensions'] );
    unset( $tests['direct']['php_default_timezone'] );
    unset( $tests['direct']['php_sessions'] );
    unset( $tests['direct']['utf8mb4_support'] );
    unset( $tests['direct']['https_status'] );
    unset( $tests['direct']['ssl_support'] );
    unset( $tests['direct']['scheduled_events'] );
    unset( $tests['direct']['http_requests'] );
    unset( $tests['direct']['is_in_debug_mode'] );
    unset( $tests['direct']['dotorg_communication'] );
    unset( $tests['direct']['background_updates'] );
    unset( $tests['direct']['loopback_requests'] );
    unset( $tests['direct']['rest_availability'] );
    return $tests;
}
 
add_filter( 'site_status_tests', 'prefix_remove_site_health' );

检测项全部禁止后,你会看到 站点健康 检测结果显示100%,就没有任何健康提示了!

本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。 本站提供的所有下载文件均为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。 我站提供用户下载的所有内容均转自互联网,如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱 [email protected],站长会进行审查之后,情况属实的会在三个工作日内为您删除。

免费影视站推荐:白嫖TV
DUDU资源 » 关于WordPress站点健康提示REST API错误及解决办法

发表评论

提供最优质的资源集合

立即查看 了解详情