Laravel 7.x路由重定向时自动追加http前缀异常问题
问题诱因
该问题本质是Laravel生成路由URL时无法正确获取站点根域名,导致把协议头和路由路径当成相对路径拼接到了当前访问域名之后,常见触发原因如下:
- 服务提供者URL强制配置错误:如果在
AppServiceProvider.php的boot方法中错误调用URL::forceRootUrl('http://')这类错误参数,会直接导致路由生成时拼接异常的协议前缀。 .env配置错误:APP_URL参数为空、仅填写了http://没有补全域名,会导致Laravel无法获取正确的根地址生成绝对URL。- 反向代理配置异常:使用CDN、负载均衡、Nginx反代时没有正确传递请求头,或者Laravel没有配置可信代理,导致框架无法识别当前请求的真实域名和协议。
config/app.php中的url配置项被修改为无效值,比如硬编码为空或者仅保留协议头。
修复方案
按照优先级逐一排查修正即可:
- 修正APP_URL配置
打开项目根目录的.env文件,填写完整的站点域名:
APP_URL=https://site.com
修改后执行命令清理配置缓存:php artisan config:clear
2. 检查服务提供者URL强制配置
打开app/Providers/AppServiceProvider.php,查看boot方法中的URL强制配置,删除错误的forceRootUrl调用,正确写法示例:
public function boot() { // 如需强制HTTPS仅需配置这一行即可,不需要额外修改根路径 \URL::forceScheme('https'); }
- 配置可信代理与反向代理请求头
如果使用了反向代理服务,打开app/Http/Middleware/TrustProxies.php,配置可信代理:
// 生产环境建议填写具体的代理服务器IP,不要用* protected $proxies = '*';
同时在Nginx站点配置中添加请求头传递规则:
location ~ \.php$ { # 其他现有配置不变,新增以下三行 fastcgi_param HTTP_HOST $host; fastcgi_param X-Forwarded-Proto $scheme; fastcgi_param X-Forwarded-For $remote_addr; }
- 校验config/app.php配置
打开config/app.php,确认url配置项为默认的读取ENV参数的写法:
'url' => env('APP_URL', 'http://localhost'),
内容的提问来源于stack exchange,提问作者FATF
相关产品推荐
相关产品推荐

