确实在Laravel中将HTTP强制为https

时间:2019-12-12 22:30:30

标签: php laravel heroku

我有这个Laravel应用,我正将其投放到Heroku。 我遵循了所有步骤,直到遇到与某些资产(例如,asset('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_page_url”的属性的响应 仍然是纯HTTP(不是我需要的https)。

按照Heroku的要求,我该如何做为https? Here you can see the next_page_url property in http

3 个答案:

答案 0 :(得分:0)

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

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

正如@seejayoz所说,您需要配置受信任的proxies list for your app

答案 1 :(得分:0)

Heroku的负载平衡设置意味着来自X-Forwarded-Proto标头的请求是HTTP还是HTTPS的指示。 (顺带一提,Laravel还需要the X-Forwarded-For header来获取用户的真实IP地址。)

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

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

答案 2 :(得分:-1)

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

$pagi=$answers->simplePaginate(3); 
$pagi->withPath("https://link/xxx/"); 
return $pagi;