2015-12-20 29 views
6

sto caricando il mio css utilizzando questo formato: <link href="{{ asset('assets/mdi/css/materialdesignicons.min.css') }}" media="all" rel="stylesheet" type="text/css" /> e carica bene per tutte le richieste HTTPle attività di carico della lama con https in laravel

Ma quando carico la mia pagina di login con SSL (https), ho un ...page... was loaded over HTTPS, but requested an insecure stylesheet 'http...

Qualcuno può dirmi come faccio a caricare le risorse blade su https anziché su http?

Devo provare a caricare le risorse in modo sicuro? O non è il lavoro di Blade?

risposta

21

Credo che secure_asset sia quello che stai cercando.

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

Grazie, esattamente quello che stavo cercando :) – Grigio

+0

Buono, grazie :) – Sambhav

3

Un altro approccio sarebbe quello di passare true come secondo parametro.

/** 
* Generate an asset path for the application. 
* 
* @param string $path 
* @param bool $secure 
* @return string 
*/ 
function asset($path, $secure = null) 
{ 
    return app('url')->asset($path, $secure); 
} 

Come potete vedere qui sotto secure_asset chiama semplicemente asset con il secondo parametro true.

/** 
* Generate an asset path for the application. 
* 
* @param string $path 
* @return string 
*/ 
function secure_asset($path) 
{ 
    return asset($path, true); 
} 
+1

Grazie per il suggerimento alternativo :) – Grigio

+0

:) Prego! –

8

ho avuto un problema con asset funzione quando è caricato risorse attraverso il protocollo HTTP quando il sito è stato utilizzato HTTPS, che è causato il problema "contenuto misto".

Per risolvere il problema è necessario aggiungere \URL::forceScheme('https') nel file AppServiceProvider.

Così miniera si presenta così (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(env('APP_ENV') == 'production') { 
      \URL::forceScheme('https'); 
     } 
    } 

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

Questo è utile quando si ha bisogno https solo sul server (env('APP_ENV') == 'production') e non localy, quindi non c'è bisogno di forzare asset funzione da utilizzare https .

+0

questa è una risposta migliore, dal momento che voglio utilizzare solo HTTPS sul server di produzione –

1

Ecco la mia configurazione per far funzionare HTTPS con le risorse. Per abilitare questo in produzione, aggiungi REDIRECT_HTTPS = true nel file .env.

<?php 

namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 
use Illuminate\Support\Facades\Schema; 

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

     Schema::defaultStringLength(191); 
    } 

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

Io uso risposta @Scofield dall'uso \URL::forceScheme('https'); Questa soluzione ha anche lavorato per mostrare HTTPS per tutte le rotte ma questo non ha lavorato per me per $ request-> url() si mostrano http invece di https

quindi ho usato $this->app['request']->server->set('HTTPS', true); invece di \URL::forceScheme('https');

sto usando laravel 5.4 e aggiornare .file di ENV e appserviceproviders

<?php 

namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 
use Illuminate\Support\Facades\Schema; 
use Log; 

class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    * 
    */ 
    public function boot() 
    { 
     If (env('APP_ENV') !== 'local') { 
      $this->app['request']->server->set('HTTPS', true); 
     } 

     Schema::defaultStringLength(191); 
    } 

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

nel mio file ENV ho cambiato

APP_ENV=local to APP_ENV=development 

APP_ENV = locale per localhost APP_ENV = sviluppo/produzione per il server di

di lavoro dopo aver cambiato run ENV questo comando artigiano

php artisan config:clear 

Home Aiuta :-)