route () 函数将 https 渲染成了 http
部署到 Heroku 上后发现 route() 函数将 https 渲染成了 http
没找到问题所有,请知道的同学如果有时间帮忙解答下.
谢谢.
关于 LearnKu
高认可度评论:
追了一下源码,渲染成
http://的原因可能如下:route函数的定义在/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php中:注意其中的
to方法:传递了一个
$secure参数给到generator的to方法,且默认值为null,找到/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php中的定义:$secure参数传递到了formatScheme方法,找到定义:可以看到,当
$secure不为空时,会根据$secure的值来选择https还是http;如果$secure为空,则会去检查$cachedSchema的值并返回,如果$cachedSchema的值为空,则会根据$forceScheme的值来进行设定,如果$forceScheme的值为空,则会调用getScheme方法来进行相关的设置,找到/vendor/symfony/http-foundation/Request.php中的定义:此处会通过
isSecure方法来检查安全性配置:如果使用了教程中的默认设置,最终返回的链接是否启用
https://是由服务器的相关配置决定的。herokuapp.com这个域名是有SSL证书的,如果要渲染出https://链接,方法有两个:1.修改heroku上的相关配置;2.设定$forceScheme的值,强制启用 HTTPS。最简单的处理方式,修改nginx代理fpm配置:
注意fastcgi_param HTTPS on;
应该是跟你的服务器配置有关系,具体原因百度你应该可以得到你想要的答案
.env文件里面,
APP_URL把HTTP://改成HTTPS://试试?追了一下源码,渲染成
http://的原因可能如下:route函数的定义在/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php中:注意其中的
to方法:传递了一个
$secure参数给到generator的to方法,且默认值为null,找到/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php中的定义:$secure参数传递到了formatScheme方法,找到定义:可以看到,当
$secure不为空时,会根据$secure的值来选择https还是http;如果$secure为空,则会去检查$cachedSchema的值并返回,如果$cachedSchema的值为空,则会根据$forceScheme的值来进行设定,如果$forceScheme的值为空,则会调用getScheme方法来进行相关的设置,找到/vendor/symfony/http-foundation/Request.php中的定义:此处会通过
isSecure方法来检查安全性配置:如果使用了教程中的默认设置,最终返回的链接是否启用
https://是由服务器的相关配置决定的。herokuapp.com这个域名是有SSL证书的,如果要渲染出https://链接,方法有两个:1.修改heroku上的相关配置;2.设定$forceScheme的值,强制启用 HTTPS。这个问题困扰了我几天,解决方案记录一下:
如果你前端用了 SLB 的话,后端默认是 80 端口,需要在 SLB 中设置
X-Forwarded-Proto,同时修改TrustProxies.php这个 Middleware 加入相关的前端代理服务器 IP,官网文档参见https://learnku.com/docs/laravel/6.x/requests#conf...
最简单的处理方式,修改nginx代理fpm配置:
注意fastcgi_param HTTPS on;