在 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文档here,asset
方法自动检测请求协议并相应地生成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,而无需对以前的应用程序代码进行任何更改。
我在 laravel 5.2 上提出了申请。 在 HTTP 上 运行 没问题。
我使用 asset
函数生成了完整的 url 而不是使用相对的函数
<link rel="stylesheet" type="text/css" href="{{ asset('/css/bootstrap.min.css') }}">
根据laravel文档here,asset
方法自动检测请求协议并相应地生成URL。
现在该应用程序不在 HTTPS 上 运行,
我可以将 secure_asset
用于 HTTPS URLs,但随后它将在 HTTP 和 localhost
.
我知道我缺少一些东西,使用 laravel
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,而无需对以前的应用程序代码进行任何更改。