繁体   English   中英

在 Laravel 中真正强制 http 到 https

[英]Really force http to https in Laravel

我有这个 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_page_url”的属性,它仍然是普通的 http(不是我需要的 https)。

我可以做些什么来使之成为 Heroku 要求的 https? 在这里你可以看到 http 中的 next_page_url 属性

正确的做法是在配置文件(以.env文件为例)将你的app的URL改为https://example.com 只需写 APP_URL= https://example.com

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

正如@seejayoz 所说,您需要为您的应用程序配置受信任的代理列表

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM