WordPress请求/wp-json/jwt-auth/v1/token时出现403 未找到授权头错误
jwt_auth_no_auth_header 403错误解决方案 这个错误的核心原因是Web服务器没有将客户端发送的Authorization请求头,完整传递给运行在后端的PHP程序,并非JWT Auth插件本身的功能故障。结合你当前的配置问题,可按以下步骤逐一排查解决:
1. 修正现有.htaccess的配置逻辑
你当前的配置存在三个关键缺陷:
- 处理Authorization头的规则重复书写了两次,冗余配置容易触发Apache解析冲突
- 头处理规则的顺序放在WordPress核心路由重写规则之后,执行到带
[L]标记的核心路由规则时就会直接跳转到index.php,后面的头处理逻辑根本不会被触发 - 从网页复制的规则携带了
"这类HTML转义字符,会导致Apache无法正确解析SetEnvIf规则
请直接将WordPress根目录下的.htaccess替换为以下适配你站点路径(/demo/04/)的规范配置:
# 第一优先级:将Authorization请求头写入环境变量 RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 <IfModule mod_rewrite.c> RewriteBase /demo/04/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /demo/04/index.php [L] </IfModule>
2. 排查服务器侧的请求头过滤
如果替换完.htaccess配置仍报错,说明问题出在Web服务器层的请求拦截:
- 临时在站点根目录创建
auth-test.php文件,写入代码<?php var_dump($_SERVER); ?>,然后携带Authorization: Test 123头访问这个文件,查看返回的$_SERVER数组中是否存在HTTP_AUTHORIZATION、REDIRECT_HTTP_AUTHORIZATION字段 - 如果上述数组中完全找不到对应字段,说明服务器开启的
mod_security规则、或Nginx兼容层主动丢弃了Authorization请求头:Nginx环境需要在站点配置中开启fastcgi_pass_request_headers on;确保请求头传递给PHP-FPM;Apache环境需要调整mod_security规则允许带Authorization头的请求放行
3. 增加wp-config.php的兜底兼容逻辑
即使环境变量存在读取延迟,也可以在WordPress核心加载前手动补全头读取逻辑,找到wp-config.php中加载wp-settings.php的位置,在其上方添加以下代码:
// 兼容部分CGI环境下的认证头读取 if (!isset($_SERVER['HTTP_AUTHORIZATION'])) { if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) { $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION']; } }
4. 最终验证
配置修改完成后,可直接用curl命令测试接口连通性,命令模板:curl -X POST 你的站点域名/demo/04/wp-json/jwt-auth/v1/token -d "username=管理员账号&password=管理员密码"
正常返回包含token字段的JSON结构即为配置生效。
内容的提问来源于stack exchange,提问作者Osama Nashaat
相关产品推荐
相关产品推荐

