记录一下那天晚上的排查过程。日志里出现大量 /wp-json/wp/v2/users 请求,返回的 JSON 里带着编辑账号名。这类地址还能被搜索引擎索引,输入站点名加人名就能搜到。
刚开始盯着「主题的 author 链接指向 ?author=1 又跳回用户归档」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。REST 接口默认公开用户列表,未登录也能读取。少数情况下是接口返回 200 且没有 noindex,蜘蛛按正常页面处理。
还有一种情况,安全插件只挡了 /wp-login.php,没管 REST 路径。
上来先确认接口是否公开可读
curl -s https://www.example.com/wp-json/wp/v2/users | jq 'length'
接着用过滤器关掉未登录访问
add_filter('rest_endpoints', function($e){ unset($e['/wp/v2/users']); return $e; });
等前面都确认过,再确认返回 401 而不是列表
curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/wp-json/wp/v2/users
别只看报错消失,验证要多做一步。未登录请求返回 401,site 查询里作者归档和用户 JSON 的条目消失,日志里该路径的请求数降到零。
关接口不会影响前台展示,但会打断依赖 REST 的编辑器功能,改完需要以管理员身份登录后台点一遍文章编辑页。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
