在 CloudFlare 后面的 Laravel 从 HTTP 迁移到 HTTPS

Moving from HTTP to HTTPS on Laravel behind CloudFlare

我在 laravel 5.2 上提出了申请。 在 HTTP 上 运行 没问题。

我使用 asset 函数生成了完整的 url 而不是使用相对的函数

<link rel="stylesheet" type="text/css" href="{{ asset('/css/bootstrap.min.css') }}">

根据laravel文档hereasset方法自动检测请求协议并相应地生成URL。

现在该应用程序不在 HTTPS 上 运行, 我可以将 secure_asset 用于 HTTPS URLs,但随后它将在 HTTP 和 localhost.

上停止 运行

我知道我缺少一些东西,使用 laravel

从 HTTP 迁移到 HTTPS 并不难

PS - Cloudflare 正在用于服务 HTTPS 请求。

访问请求 要通过依赖注入获取当前 HTTP 请求的实例,您应该在控制器构造函数或方法上对 Illuminate\Http\Request class 进行类型提示 https://laravel.com/docs/5.2/requests#request-information

您可以使用 Request::secure() 检查请求是否通过 HTTPS 完成,而不是通过配置手动设置它

根据 laravel source,如果您没有明确提示它使用 http/https,资产将根据请求信息生成协议。所以,你不应该在这里改变任何东西。一旦您开始通过安全连接请求它,它将切换到 https。

到目前为止给出的所有答案都是正确的,但 none 解决了我的问题。

主要问题是我的申请落后了CloudFlare

Laravel 通过检查 HTTP header 检测请求是安全的还是不安全的,即 $_SERVER['REQUEST_SCHEME'] 即使请求是 HTTPS,由于 cloudflare,它仍然是 HTTP。

CloudFlare 设置了不同的 header,即 $_SERVER['HTTP_X_FORWARDED_PROTO'] 必须检查以检测请求是否安全

根据 this 文章并对此进行一些更改,我成功地生成了 HTTPS URL,而无需对以前的应用程序代码进行任何更改。