Laravel 5.6运行php artisan serve强制跳转HTTPS 本地如何关闭?
触发原因
- 项目未区分环境配置了全局HTTPS强制跳转逻辑,最常见的是在
AppServiceProvider的boot方法中直接调用了\URL::forceScheme('https'),本地开发环境下该规则依然生效 - 全局中间件中注册了HTTPS跳转中间件,未添加本地环境豁免逻辑
.env配置错误,APP_ENV设为生产环境,或APP_URL前缀为https,或自定义开启了强制HTTPS的环境变量- 浏览器缓存了过往的HTTPS 301永久重定向规则,即使后端配置修改后依然自动跳转
本地环境解决方案
1. 调整服务提供者的协议强制逻辑
打开app/Providers/AppServiceProvider.php,修改boot方法内的相关代码,仅生产环境启用HTTPS强制:
public function boot() { // 仅生产环境强制HTTPS if ($this->app->environment('production')) { \URL::forceScheme('https'); } }
2. 校验全局中间件配置
查看app/Http/Kernel.php的$middleware数组,如果存在自定义的HTTPS跳转中间件,在中间件逻辑中添加本地环境跳过规则:
public function handle($request, Closure $next) { // 本地环境直接跳过HTTPS校验 if (!$request->secure() && app()->environment('production')) { return redirect()->secure($request->getRequestUri()); } return $next($request); }
3. 修正环境配置并清除缓存
修改项目根目录.env文件:
- 调整
APP_ENV=local确认是本地开发环境 - 修改
APP_URL=http://127.0.0.1:8000使用http协议 - 如果存在
FORCE_HTTPS配置项,设置为FORCE_HTTPS=false
修改完成后执行命令清除配置缓存:php artisan config:clear
重启php artisan serve服务即可。
4. 排查浏览器缓存问题
如果配置修改后依然跳转,可使用浏览器无痕模式访问测试,或者清除当前站点的缓存数据,避免过往的301重定向缓存影响。
内容的提问来源于stack exchange,提问作者user1765388
相关产品推荐
相关产品推荐

