在heroku上使用自定义https域名的Laravel无法生成https路由

4
我有一个运行在Heroku上的Laravel 5.2应用程序,使用Cloudflare处理自定义域名。自定义域名使用CNAME指向Heroku域名。我已经启用了Cloudflare的完全SSL以允许https。Heroku URL本身已启用SSL,因此这不是问题。
当生成路由(例如通过route('home'))时,它包含整个自定义域,但使用http而不是https。这经常会导致浏览器控制台发出警告,如下所示:

混合内容:页面“https://example.com”是通过安全连接加载的,但包含一个表单,该表单针对一个不安全的端点“http://example.com/endpoint”。该端点应该提供一个安全连接。

你有什么想法为什么Laravel路由生成器没有使用https?
4个回答

0
在你的.env文件中,确保你的APP_URL显示为https。

这似乎不起作用。 我的印象是app.url配置值仅用于artisan命令。 理想的解决方案只需生成没有域部分的路由即可。 例如,/endpoint而不是http://example.com/endpoint - harryg
1
啊,看一下这个链接,有一个包括 URL::forceSchema('https'); 的答案。你可以把它放在你的 AppServiceProvider 里。http://laravel.io/forum/12-26-2014-routing-with-https - swatkins

0
虽然提交晚了,但对我来说这个方法很有效。您可以通过隐式指定来指定路由应该是HTTP还是HTTPS,只需添加以下代码:

URL::forceScheme('https');

将其放置在web.php或api.php文件的底部。URL实现在:

Illuminate\Support\Facades\URL;

我已在 Laravel 8.xx 上进行了测试,它可以生成始终为 HTTPS 的路由。你只需要在 Github 上深入挖掘 Laravel/framework 存储库,就可以找到许多功能,这些功能没有官方文档。

0

对于还没有解决这个问题的人,请尝试以下操作:

在您的config/app.php文件中编辑以下内容的值:

return [
  //...

  'url' => env('APP_URL', 'https://yourdomainexample.herokuapp.com'),
  'asset_url' => env('ASSET_URL', 'https://yourdomainexample.herokuapp.com'),
]

0
你可以指定路由为 https:
Route::get('signin', ['uses' => 'AuthController@sign', 'https']);

确保你没有硬编码任何资产。

这不是一个好的解决方案,因为1)我必须手动更新路由文件中的每个路由。2)我的开发环境没有https,所以这会在开发中引起问题。应用程序应该能够检测到是否启用了ssl。我觉得这个问题是由于我正在使用cloudflare ssl与herouku的方式造成的。但它仍然是端到端的https。 - harryg
请使用env('https')代替,然后在您的.env文件中添加HTTPS=httpsHTTPS=http - user2094178

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接