写在前面

我往常用Nginx比较多,Apache用的比较少,这不,把一个项目由原先的Nginx服务当中放到Apache里一跑

完蛋,原本用的好好的功能,全部提示我未登录,我还以为是登录鉴权接口报错了呢

结果一看,是php端获取不到Authorization了……

这玩意写法很通用啊,不都是从request头,也就是header里获取到的嘛

查了一下才知道,原来Apache比较高级,还默认关闭了Authorization这个值的输入,得手动开启才行。

开启方法

在你的虚拟主机配置或.htaccess中添加以下指令:

# 允许Authorization头传递给PHP
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

相当简单,比如我的项目根目录下的这个.htaccess文件原先是这个样子的。

location / {
    if (!-f $request_filename){
        rewrite ^(.*)$ /index.php?s=/$1  last;
    }
}

补充这部分之后是这样的

location / {
    if (!-f $request_filename){
        rewrite ^(.*)$ /index.php?s=/$1  last;
    }

    # 允许Authorization头传递给PHP
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
}

就可以收到了。

ApacheNginxAuthorization属性值问题处理的差异

Apache和Nginx处理差异

瑞思拜~

最后修改:2025 年 07 月 25 日
如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~