Laravel asset() 如何支援 http & https

在 laravel 使用 asset() 來設定一些 public/ 靜態文檔相關位置

在本機主要使用 http,但是更新到正式機需要ssl 憑證

現在有一個情況是,在使用 laravel asset path ,更新到線上主機仍套用 http

底下說明如何在線上及本地切換 http, https

增加.env環境參數

首先在 .env 新增

REDIRECT_HTTPS = 1 # 0: http, 1: https

設定 forceSchema 觸發條件

接著設定

app\Providers\AppServiceProvider.php

<?php
namespace App\Providers;

use Illuminate\Routing\UrlGenerator;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot(UrlGenerator $url)
{
  if(env('REDIRECT_HTTPS'))
  {
    $url->forceScheme('https');
  }
}

透過 APP_ENV 來判斷

以上狀況可能是在於需要透過一個參數來判斷是否導向 https 在多數實際使用時,建議直接透過 APP_ENV 作為判斷依據

在 production 環境執行導向,例如:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\URL;
use App;
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //redirect http to https
        if (App::environment('production')) {
            Url::forceScheme('https');
        }
    }

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