1. ホーム
  2. php

LaravelでBladeのアセットをhttpsで読み込む

2023-11-03 14:44:57

質問

このような形式でCSSを読み込んでいます。 <link href="{{ asset('assets/mdi/css/materialdesignicons.min.css') }}" media="all" rel="stylesheet" type="text/css" /> という形式で読み込んでいますが、全てのhttpリクエストで正常に読み込まれます。

しかし、ログインページをSSL (https) で読み込むと ...page... was loaded over HTTPS, but requested an insecure stylesheet 'http...

どなたか、bladeのアセットをhttpではなくhttpsで読み込ませる方法を教えていただけませんか?

資産を安全に読み込もうとする必要がありますか?それとも、Bladeの仕事ではないのでしょうか?

どのように解決するのですか?

で問題が発生しました。 asset 関数が HTTP プロトコルでリソースを読み込むときに、ウェブサイトが HTTPS を使用している場合、それが "Mixed content" の問題の原因です。

この問題を解決するには \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にする必要がある場合に便利です( config('app.env') === 'production' ) のみで、ローカルでは必要ないため、無理に asset 関数がhttpsを使用するように強制する必要はありません。