Php 在Laravel中真正强制http到https

Php 在Laravel中真正强制http到https,php,laravel,heroku,Php,Laravel,Heroku,我有一个Laravel应用程序,我要向Heroku道歉。 我遵循了所有的步骤,直到我遇到了一个问题,一些资产(例如,资产('css/app.css')引用http URL,而不是https URL 我通过添加 if(config('app.env')==='production'){ \URL::forceScheme('https'); } 在我的AppServiceProvider.php文件的引导方法中,它成功了 但是现在我遇到了另一个与http相关的问题,前面的

我有一个Laravel应用程序,我要向Heroku道歉。 我遵循了所有的步骤,直到我遇到了一个问题,一些资产(例如,资产('css/app.css')引用http URL,而不是https URL

我通过添加

if(config('app.env')==='production'){
            \URL::forceScheme('https');
}
在我的AppServiceProvider.php文件的引导方法中,它成功了

但是现在我遇到了另一个与http相关的问题,前面的代码无法解决这个问题

我使用simplePaginate()函数获取数据,如下所示

    public function index(Question $question){
        $answers = $question->answers()->with('user');
        return  $answers->simplePaginate(3);
    }
这段代码返回一个带有3个答案的响应,以及一个名为“next\u page\u url”的属性 这仍然是纯http(不是我需要的https)

按照Heroku的要求,我可以做些什么来实现https?

我认为您可以使用withPath(或setPath别名):


正确的方法是将应用程序的URL更改为
https://example.com
在配置文件(.env文件为例)中。只需编写应用程序URL即可=

但是当您使用Heroku时,他们的平衡器可以将您的请求路由到
https://yourDomain.com
通过HTTP发送到您的应用程序。因此,Laravel应用程序接收到
http://yourDomain.com
并决定您需要一个带有HTTP链接的响应


正如@seejayoz所说,您需要配置trusted。

Heroku的负载平衡设置意味着指示请求是HTTP还是HTTPS来自
X-Forwarded-Proto
头。(顺便说一句,Laravel还需要获得用户的真实IP地址。)

默认情况下,Laravel不信任这些头(因为在不同的设置中,它可能来自恶意客户端),因此不会将任何请求检测为HTTPS。您可以通过信任标头来修复此问题


在默认配置中,只需设置
$proxy='*',
就可以了,并且在Heroku上是安全的,因为最终用户无法绕过负载平衡器。

您配置了Laravel的受信任代理吗?如果没有这个,它就无法检测到Heroku正在通过HTTPS为其提供服务。@ceejayoz,该文件已经创建,与Docs示例中的完全相同,但是问题发生了anyway@ceejayoz,现在我实际上设置了受保护的$proxies='*',它现在可以工作了。非常感谢你。如果你足够在意把它作为一个答案(而不是评论)发布,我会选择它作为最佳答案。否则我会选择亚历山大·埃米利亚诺夫的。很高兴这有帮助。我补充了一个答案。
$pagi=$answers->simplePaginate(3); 
$pagi->withPath("https://link/xxx/"); 
return $pagi;