2015-12-20 31 views
6

Tôi tải css của tôi sử dụng định dạng này: <link href="{{ asset('assets/mdi/css/materialdesignicons.min.css') }}" media="all" rel="stylesheet" type="text/css" /> và nó tải tốt cho tất cả các yêu cầu HTTPtài sản tải Blade với https trong Laravel

Nhưng khi tôi tải trang đăng nhập của tôi bằng SSL (https), tôi nhận được một ...page... was loaded over HTTPS, but requested an insecure stylesheet 'http...

Ai đó có thể vui lòng cho tôi biết làm cách nào để tạo nội dung tải lưỡi trên https thay vì http?

Tôi có nên cố gắng tải nội dung một cách an toàn không? Hay đó không phải là công việc của Blade?

Trả lời

21

Tôi tin rằng secure_asset là những gì bạn đang tìm kiếm.

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

Cảm ơn bạn, chính xác những gì tôi đang tìm kiếm :) – Grigio

+0

Tốt nhất, cảm ơn bạn :) – Sambhav

3

Một cách tiếp cận khác sẽ là vượt qua true làm tham số thứ hai.

/** 
* 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); 
} 

Như bạn thấy bên dưới secure_asset chỉ đơn giản gọi asset với tham số thứ hai true.

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

Cảm ơn bạn đã đề xuất thay thế :) – Grigio

+0

:) Bạn được chào đón! –

8

Tôi đã có một vấn đề với asset chức năng khi nó được nạp nguồn lực thông qua giao thức HTTP khi trang web đã được sử dụng HTTPS, mà là do các "Nội dung hỗn hợp" vấn đề.

Để khắc phục bạn cần thêm \URL::forceScheme('https') vào tệp AppServiceProvider của mình.

Vì vậy, tôi trông như thế này (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() 
    { 
     // 
    } 
} 

này là hữu ích khi bạn cần https chỉ trên máy chủ (env('APP_ENV') == 'production') và không localy, do đó, không cần phải buộc asset chức năng để sử dụng https .

+0

đây là câu trả lời hay hơn vì tôi chỉ muốn sử dụng https trên máy chủ sản xuất –

1

Đây là cấu hình của tôi để làm cho HTTPS hoạt động với nội dung. Để kích hoạt tính năng này trong sản xuất, thêm REDIRECT_HTTPS = true trong tệp .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

tôi sử dụng câu trả lời @Scofield bằng cách sử dụng \URL::forceScheme('https'); Giải pháp này cũng làm việc để hiển thị https cho tất cả các tuyến nhưng điều này không làm việc cho tôi với $ request-> url() nó hiển thị http thay vì https

vì vậy tôi sử dụng $this->app['request']->server->set('HTTPS', true); thay vì \URL::forceScheme('https');

tôi đang sử dụng Laravel 5.4 và cập nhật .tập tin env và 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() 
    { 
     // 
    } 
} 

trong tập tin env của tôi, tôi đã thay đổi

APP_ENV=local to APP_ENV=development 

APP_ENV = địa phương cho localhost APP_ENV = phát triển/sản xuất cho trên máy chủ

làm việc sau khi thay đổi env chạy lệnh nghệ nhân này

php artisan config:clear 

Trang chủ Trợ giúp :-)

Các vấn đề liên quan