使用Basic Auth访问WordPress API时出现MISSING_AUTHORIZATION_HEADER错误
问题原因分析
出现MISSING_AUTHORIZATION_HEADER错误的核心原因是Apache服务器默认未将Authorization请求头传递给PHP,导致WordPress REST API无法获取到Basic Auth的认证信息。插件测试页通过Cookie能正常访问,是因为Cookie属于会话认证逻辑,和Basic Auth的头认证机制完全独立。
解决方法
以下是针对性的排查和修复步骤:
1. 修正.htaccess配置,强制传递Authorization头
替换当前WordPress默认的.htaccess内容为以下配置(注意将/testblog/替换为你的实际站点路径):
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /testblog/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /testblog/index.php [L] # 传递Authorization头到PHP RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] </IfModule> # 针对CGI/FastCGI环境的额外设置 <IfModule mod_setenvif.c> SetEnvIfNoCase Authorization "(.+)" HTTP_AUTHORIZATION=$1 </IfModule>
保存后重启Apache服务,再用Postman测试Basic Auth请求。
2. 检查并启用必要的Apache模块
确保mod_rewrite和mod_setenvif模块已启用:
- 执行命令查看已启用模块:
apache2ctl -M - 如果模块未列出,执行启用命令:
a2enmod rewrite setenvif - 重启Apache:
systemctl restart apache2(Debian/Ubuntu系统)或service httpd restart(CentOS/RHEL系统)
3. 调整PHP配置(针对FastCGI环境)
编辑php.ini文件,确保以下配置正确:
cgi.fix_pathinfo = 1
修改后重启Apache和PHP-FPM(如果使用PHP-FPM)。
4. 验证Postman请求的正确性
不要手动输入Authorization头,使用Postman自带的Basic Auth认证方式:
- 在Postman的「Authorization」标签页,选择「Basic Auth」类型
- 输入用户名
testblog和密码testblog,Postman会自动生成正确的Authorization: Basic [编码后的字符串]头 - 发送请求测试是否正常
5. 排查插件与服务器配置的冲突
- 暂时禁用其他所有WordPress插件,仅保留「WordPress REST API Authentication」插件,测试请求是否正常
- 进入插件设置页面,确认已启用「REST API Basic Authentication」选项(部分插件需要手动开启该模式)
内容的提问来源于stack exchange,提问作者Genaut
相关产品推荐
相关产品推荐

