我有这个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)。
答案 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;