在 Laravel 中使用 https 加载 Blade 资源

2022-08-30 08:08:25

我正在使用这种格式加载我的css:并且它对所有http请求都加载得很好<link href="{{ asset('assets/mdi/css/materialdesignicons.min.css') }}" media="all" rel="stylesheet" type="text/css" />

但是当我使用SSL(https)加载我的登录页面时,我得到一个...page... was loaded over HTTPS, but requested an insecure stylesheet 'http...

有人可以告诉我如何通过https而不是http来制作刀片加载资产吗?

我应该尝试安全地加载资产吗?还是不是Blade的工作?


答案 1

当网站使用HTTPS时,当它通过HTTP协议加载资源时,我遇到了一个功能问题,这导致了“混合内容”问题。asset

要解决此问题,您需要将其添加到文件中。\URL::forceScheme('https')AppServiceProvider

所以我的看起来像这样(Laravel 5.4):

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        if(config('app.env') === 'production') {
            \URL::forceScheme('https');
        }
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

当您仅在服务器()上而不是本地需要https时,这很有用,因此不需要强制函数使用https。config('app.env') === 'production'asset


答案 2

我相信secure_asset就是你要找的。

<link href="{{ secure_asset('assets/mdi/css/materialdesignicons.min.css') }}" media="all" rel="stylesheet" type="text/css" />

5/15/2018 编辑:虽然我的回答直接解决了这个问题,但考虑到Laravel现在能做什么,它有点过时了。在某些情况下,您可能希望在某些环境中强制使用HTTPS,但不希望在其他环境中强制使用HTTPS。

请参阅下面的Scofield的答案,以获取更灵活的解决方案来涵盖此类情况。

08/11/2020 编辑:说真的,斯科菲尔德的答案比我的更好,将为不同的环境提供更大的灵活性。把你的麻烦交给他。


推荐