2015-12-06 95 views
3

我用我的模板下面的代碼在我的CSS文件加載:Laravel資產URL忽略HTTPS

<link rel="stylesheet" href="{!! URL::asset('css/app.css') !!}"> 

如果我認爲通過https的頁面我的本地機器上,然後鏈接到app.css文件也是https,但是在我的實時服務器上,這不會發生。如果您使用view the live site over https並查看源代碼,則可以看到指向CSS文件的鏈接仍然超過了正常的http,因此無法加載。有誰知道爲什麼會發生這種情況?

回答

4

當您的用戶通過HTTPS訪問,您的CloudFlare配置是使用HTTP通過這些請求到服務器。您有兩種選擇:

  1. 打開CloudFlare的完全或嚴格SSL。 https://blog.cloudflare.com/origin-server-connection-security-with-universal-ssl/

  2. 設置您的Web服務器看到X-Forwarded-Proto頭,並告訴PHP它正在通過HTTPS訪問時頭的值是https。如何做到這一點取決於你的網絡服務器。在nginx的,比如我做這個亞馬遜的ELB(其中發送相同的報頭):

map $http_x_forwarded_proto $is_https { 
    default off; 
    https on; 
} 

,然後這在我的FastCGI PARAMS文件:

fastcgi_param HTTPS    $is_https if_not_empty; 

在Apache中,我認爲你可以這樣做,如果mod_setenvif安裝:

SetEnvIf x-forwarded-proto https HTTPS=on 
2

您可能需要使用secure_asset函數。

<link rel="stylesheet" href="{!! secure_asset('css/app.css') !!}"> 
+0

如果我這樣做,我會得到一個錯誤:'方法secure_asset不存在' – geoffs3310

+0

@ geoffs3310我已編輯此答案。它只是'secure_asset()'。 http://laravel.com/docs/5.1/helpers#method-secure-asset – ceejayoz

+0

謝謝@ceejayoz –