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

Laravel共享主机JWT Authorization请求头无法传递至控制器问题

解决Laravel共享主机上JWT Authorization请求头丢失的问题

我之前在共享主机部署Laravel项目时,也遇到过JWT的Authorization请求头死活到不了控制器的情况,结合你的配置,给你几个实用的排查和解决思路:

  • 确认.htaccess的位置:这个文件必须放在Laravel项目的public目录下,而不是项目根目录。很多新手容易把文件放错位置,导致重写规则完全不生效。

  • 调整Authorization头的处理规则:有些共享主机的FastCGI环境下,默认的规则可能不生效,你可以把.htaccess里的授权头处理部分改成下面的写法试试:

# 处理Authorization Header
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%1]

# 如果是FastCGI环境,额外添加这段
<IfModule mod_fastcgi.c>
    SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
</IfModule>
  • 检查PHP的cgi.fix_pathinfo配置:很多共享主机默认把cgi.fix_pathinfo设为1,这会导致请求头丢失。你可以尝试在public/.htaccess里添加一行配置:
php_value cgi.fix_pathinfo 0

如果主机不允许通过.htaccess修改PHP参数,就联系服务商帮忙调整,或者你有权限的话直接修改php.ini文件。

  • 手动在Laravel中补全请求头:如果上面的方法都没用,可以在Laravel里手动获取授权头作为兜底方案。比如在你的JWT认证中间件里添加这段代码:
public function handle($request, Closure $next)
{
    // 手动获取Authorization头
    if (!isset($_SERVER['HTTP_AUTHORIZATION']) && function_exists('apache_request_headers')) {
        $headers = apache_request_headers();
        $_SERVER['HTTP_AUTHORIZATION'] = $headers['Authorization'] ?? '';
    }

    return parent::handle($request, $next);
}

或者直接在bootstrap/app.php里添加这段代码,提前处理请求头。

  • 先验证请求头是否真的发送到服务器:写一个简单的测试路由,确认前端的请求头是否真的到达了服务器:
Route::get('/debug-headers', function () {
    return response()->json([
        'request_headers' => request()->headers->all(),
        'server_vars' => [
            'HTTP_AUTHORIZATION' => $_SERVER['HTTP_AUTHORIZATION'] ?? 'Not found',
            'REDIRECT_HTTP_AUTHORIZATION' => $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] ?? 'Not found'
        ]
    ]);
});

用Postman或者curl发送带Authorization: Bearer {你的token}的请求,查看返回结果,如果HTTP_AUTHORIZATION还是不存在,那可能是主机的防火墙或者配置拦截了请求头,得联系服务商解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:28:00