强制 Laravel 使用 HTTPS

前言

在今年,全站 HTTPS 已经成为各大网站的标配。HTTPS 能使我们的浏览更加安全,用户隐私更加不易被泄露,几大浏览器也会在未来将不是 HTTPS 的网站标记为不安全。Let’s Encrypt 的出现也使网站申请证书成为一件平民化的事情,强力推荐你将你的网站全面升级成为 HTTPS。那在 Laravel 中该如何配置使全站变为 HTTPS 呢?答案其实很简单。

强制 Laravel 使用 HTTPS

在你的Providers\AppServiceProviderboot方法中添加:

    \URL::forceScheme('https');

Done. 现在你的所有生成的路由链接已经默认是 HTTPS 了。当然你也可以用 Nginx 来做非 HTTPS 跳转,只是我觉得这个方法更加简单。

注意:forceScheme这个函数在5.4的时候更换过名称, L5.3 及以下版本请使用\URL::forceSchema('https');

Enjoy :tada:

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 2年前 加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 11

在创建route的时候参数上加上 https => true 也是好方法

2年前 评论

forceSchema还是forceScheme?

2年前 评论

@mostwin 应该是5.4更换了函数名称,具体可以看一下这个 commit 。5.3及以下应该用\URL::forceSchema('https');,我改下文章提醒下。

2年前 评论

我来补充一个问题&解决方案

当项目中强制启用 Https 后,假使项目中使用了 laravel/passport ,就会遇到

You must set the encryption key going forward to improve the security of this library - see this page for more information https://oauth2.thephpleague.com/v5-securit...

解决方案是将 composer.json

"laravel/passport": "^2.0"

调整成

"laravel/passport": "^3.0"
2年前 评论

@young 请问楼主的这个方法可不可以强制下面两种情况:
1 用户手动在浏览器输入 http 地址?
2 前端页面的 http 地址?
这两种如果都没有办法强制的话,可没法说强制 laravel 使用 https 哦

2年前 评论

@reatang
例如:Route::get('/', 'TestController@index')->name('index');
你说的https => true应该加在什么位置?

2年前 评论

@LeO荣 你用户这种的话,那么就是:

Route::get('/', ['uses' => 'TestController@index', 'https'])->name('index')

如果用group的话就是:

Route::group(['https'], function(){
//some routes
})
2年前 评论
rainbowmorel 4个月前

@reatang 十分感谢!

2年前 评论

这个方法可以让所有路由地址转变成 HTTPS。但是碰到一个问题,如果是302跳转的地址则无法转成 HTTPS,比如:Laravel登录成功后跳转到 dashboard 首页,打开的页面里包含的链接地址都是HTTPS,但是浏览器地址栏里的URL 依然是HTTP,这个该怎么解决?

1年前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!