PHP项目使用JWT授权时$_SERVER['HTTP_AUTHORIZATION']无法正常取值问题
- 首先确认Apache的
.htaccess生效权限已开启:找到站点对应的VirtualHost配置段,将AllowOverride None修改为AllowOverride All,修改后重启Apache服务再测试。 - 补充
.htaccess兼容配置:在你已有的配置基础上新增如下规则,部分FastCGI模式下该规则比重写规则兼容性更好:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
- 确认服务器环境是否匹配:如果你实际使用的是Nginx而非Apache,
.htaccess配置完全不生效,需要在Nginx站点配置的fastcgi_param段新增如下配置,之后重启Nginx:
fastcgi_param HTTP_AUTHORIZATION $http_authorization;
- 兜底兼容方案:无需修改服务器配置,直接通过PHP原生函数读取所有请求头获取Authorization值:
$allHeaders = getallheaders(); $token = $allHeaders['Authorization'] ?? '';
- 排查前端请求规则:
- 跨域请求场景下,必须在服务端CORS配置的
Access-Control-Allow-Headers中加入Authorization,否则浏览器会自动过滤该请求头,后端无法接收 - 确认前端传值时请求头拼写为
Authorization,未出现拼写错误、多余空格或自定义前缀不符合JWT规范的问题
- 跨域请求场景下,必须在服务端CORS配置的
内容的提问来源于stack exchange,提问作者chris227
相关产品推荐
相关产品推荐

