混合内容(laravel)

Ato*_*ity 12 laravel-5

我收到以下错误(在每一页上)

app.js:703 混合内容:“ https://sitename.com/ ”页面已通过 HTTPS 加载,但请求了不安全的 XMLHttpRequest 端点“ http://sitename.com/index.php/getMessages ”。此内容也应通过 HTTPS 提供。

该网站是用 Laravel 构建的。有没有人知道如何解决这个错误?

sha*_*ons 20

就我而言,这是因为我不知道该asset()函数没有自动处理 https(正如frankfurt-laravel 的回答所指出的那样)。

为了解决这个问题,因为我在 dev 中不使用 SSL,所以我ASSET_URL在 .env 中将 https url 设置为:

APP_URL=https://example.com
ASSET_URL="${APP_URL}"
Run Code Online (Sandbox Code Playgroud)

这会覆盖asset()使用 https url 的函数,而根本无需修改该函数。有关更多上下文,请参阅文档

  • 从 Laravel 7.x 开始也可以工作。谢谢! (3认同)
  • 这解决了我。奇怪的是,在 6 个相同的 L7 部署中,只有 1 个站点需要这样做。 (2认同)

Vin*_*ngh 19

如果您要将网站从 HTTP 迁移到 HTTPS,并且它在 HTTP 上运行得很好,并且您已在 config/app.php 和 .env 文件中添加了带有 https 的新 URL,那么您可能需要添加以下内容在 app/Providers/AppServiceProvider.php 文件的启动函数中添加代码片段,不要忘记添加“use Illuminate\Support\Facades\URL;” 在文件顶部修复此错误。 请检查附件以获得更好的示例代码

use Illuminate\Support\Facades\URL;

public function boot()
{
       URL::forceScheme('https');
}
Run Code Online (Sandbox Code Playgroud)


小智 8

几天前我遇到了同样的问题。你使用 Cloudflare 吗?将灵活 SSL 更改为完整。


fra*_*vel 6

我建议使用$secureLaravel(5.6 肯定有)提供的方法参数:

当您使用资产加载时,例如

 <!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)

asset()如果您有某种高级 IDE,则可以查找 的定义。如果没有,请检查此文件helpers.php

但是,文档说

/**
 * Generate an asset path for the application.
 *
 * @param  string  $path
 * @param  bool    $secure
 * @return string
 */
Run Code Online (Sandbox Code Playgroud)

所以你只需要true作为第二个参数传递,然后以安全的方式加载资源。对于上面的例子,它将是

<!-- Scripts -->
<script src="{{ asset('js/app.js',true) }}" defer></script>
<!-- Styles -->
<link href="{{ asset('css/app.css', true) }}" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用 ,这将导致冲突php artisan serve,因为 artisan 无法通过 HTTPS 协议提供服务。因此,您需要 HTTPS 设置,例如在 MacOS上使用Valet或在 Windows上使用Homestead。按照链接了解设置详细信息。

希望这有帮助,请让我知道它是否有效。


Har*_*osh 5

确保从 XMLHttpRequest 端点 URL 中删除尾部斜杠。


小智 0

在您的 .env 文件中将 url 设置为 httpsAPP_URL=https://sitename.com并在 config/app.php 中将 url 设置为'url' => env('APP_URL', 'APP_URL=https://sitename.com'),应该可以解决您的问题