强制 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 于 6年前 加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11

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

6年前 评论

forceSchema还是forceScheme?

6年前 评论

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

6年前 评论

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

当项目中强制启用 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"
6年前 评论

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

6年前 评论

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

6年前 评论

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

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

如果用group的话就是:

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

@reatang 十分感谢!

6年前 评论

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

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!