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

配置Basic-Auth后访问WP REST API仍报401错误,求助排查

WP REST API 401认证错误排查方案

问题背景

我有一个WordPress站点https://example.com,需要使用WP REST API,但遇到了认证失败的问题:

  • 已安装Basic-Auth插件
  • 当前.htaccess配置如下:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>
# END WordPress
  • 测试了HTTP和HTTPS协议,仍返回401错误:
{
  "code": "rest_cannot_access",
  "message": "Only authenticated users can access the REST API.",
  "data": {
    "status": 401
  }
}
  • 请求截图:
    REST API认证错误截图

排查与解决方法

我之前也踩过Basic Auth搭配WP REST API的坑,给你几个实用的排查方向:

1. 先确认插件是否真的启用了

别笑,有时候安装完插件就忘了点「启用」!去WordPress后台的「插件」页面,找到Basic-Auth插件,确保它是激活状态。

2. 调整.htaccess里Authorization规则的位置

你的.htaccess虽然加了Authorization头的处理规则,但位置不对——WordPress的Rewrite规则是按顺序执行的,你把Authorization的规则放到了转发到index.php的规则之后,这时候请求已经被转走了,头信息根本没被处理。

调整后的正确.htaccess应该是这样:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# 先处理Authorization头,再做其他转发
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

保存后记得刷新站点缓存,再测试API请求。

3. 强制服务器传递Authorization头

很多共享主机会默认屏蔽HTTP_AUTHORIZATION头,这时候可以在wp-config.php文件末尾加一段代码来强制启用:

define('FORCE_SSL_ADMIN', true);
// 修复Authorization头传递问题
if ( !isset($_SERVER['HTTP_AUTHORIZATION']) && isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']) ) {
    $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
}

保存后重新测试。

4. 检查用户权限

确保你用来认证的WordPress用户有足够的API访问权限——比如至少是「编辑」角色,订阅者角色默认是没有权限访问REST API的。去后台「用户」页面看看这个用户的角色。

5. 验证请求的认证方式是否正确

确认你发送请求时,确实正确添加了Basic Auth信息:

  • 要么在请求头里加Authorization: Basic [base64编码的用户名:密码](注意base64编码要正确,比如admin:123456编码后是YWRtaW46MTIzNDU2)
  • 要么用curl命令测试:
curl -u 你的用户名:你的密码 https://example.com/wp-json/wp/v2/posts

如果以上方法都没用,建议暂时禁用其他插件(尤其是安全类插件,它们可能会拦截API请求),或者切换到默认主题试试,排查是否有冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:53:10