You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress API公共端点匿名访问返回401错误如何解决

WordPress自定义REST API匿名访问401解决方法

你已经给路由设置__return_true作为权限回调仍出现匿名访问401、登录后可正常访问的问题,按以下优先级排查修复:

  • 排查全局REST鉴权拦截
    这是90%同类问题的诱因:各类安全加固插件、主题或自定义代码会挂载rest_authentication_errors过滤器,全局拦截所有未登录的REST API请求,这个拦截的优先级高于单路由的权限回调,会直接返回401。
    先加如下测试代码验证是否为该问题:
    add_filter( 'rest_authentication_errors', function( $result ) {
        // 替换为你自己的接口路径特征,比如你的路由是/wp-json/myapi/v1/test,就写/myapi/v1/test
        if ( str_contains( $_SERVER['REQUEST_URI'], '/wp-json/替换成你的路由前缀' ) ) {
            return true;
        }
        return $result;
    }, 999 );
    
    加完后用Postman发起匿名请求,如果能正常返回,就定位具体是哪个插件/代码加的全局拦截,针对你的公开路由单独放行即可,不要全局放开所有REST接口权限,避免安全风险。
  • 检查路由注册代码结构
    很多人写register_rest_route时参数位置错误,把permission_callback写到了参数配置的args数组内部,导致配置不生效,参考正确写法:
    // 正确写法示例
    register_rest_route( '自定义命名空间/v1', '/公开路由路径', [
        'methods'  => 'GET', // 接口支持的请求方法
        'callback' => '接口处理回调函数名',
        'permission_callback' => '__return_true', // 注意:必须和methods、callback同级,不能写到args里
        'args'     => [
            // 这里写接口参数的校验规则
        ]
    ]);
    
  • 排查回调函数内部权限逻辑
    如果路由权限配置正确,检查回调函数内部是否自带权限判断,比如调用了current_user_can()做权限校验、或者使用了wp_update_post()这类默认要求登录权限的函数,这类逻辑在匿名访问时也会抛出401错误。可以临时在回调函数开头加return "test success";测试,排除回调内部代码的问题。
  • 刷新路由缓存
    修改完路由代码后,进入WordPress后台「设置-固定链接」页面,不需要修改任何配置,直接点击底部的「保存更改」,即可自动刷新重写规则和REST路由缓存,避免旧配置缓存导致不生效。
  • 排查服务器层面拦截
    如果以上步骤都无效,检查服务器的WAF规则、Web服务器(Nginx/Apache)的访问控制配置,部分服务器面板的防扫描规则会默认拦截匿名访问wp-json路径的请求,针对你的公开接口路径放行即可。

注意:公开接口务必做好参数校验、频率限制,避免被恶意调用拖垮服务器,不要为了方便直接关闭整个REST API的鉴权。

内容的提问来源于stack exchange,提问作者Aaron Magnaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:27:19