2012-11-02 67 views
8

今天我發現,如果您訪問使用文檔頭中css鏈接路徑中的{site_url}標記的EE網站,則該網站無法加載CSS文件如果你輸入https而不是http。HTTPS和HTTP ExpressionEngine網站URL標記

我已經通過使用一個htaccess文件強制到http上,但我只是想知道是否有一個EE內的設置,你可以改變,使兩個工作?

這隻發生在Chrome瀏覽器和IE瀏覽器上,我猜想取決於您的瀏覽器設置爲允許安全明智。

回答

5

當我加載CSS和JS我從來沒有使用域,我只是相對設置它。例如:

<link rel="stylesheet" href="/layout/styles/layout.css" > 

如果您嘗試這樣做是否奏效?

+0

Gareth可能會使用{stylesheet =}來獲得這個優點,在這種情況下,他提到的行爲會顯示出來。 –

+0

嗨肖恩是的,工作得很好,這是我最終做的。上面的Deviarte答案看起來像一個有趣的解決方案? – Gareth

7

我在這個問題上得到了一些很大的幫助previously。我希望現在也對你有用。

+1

嘿斯科特 - 我們注意到,您有幾個EE問題的幫助。如果你可以在這裏支持我們的EE堆棧交換提議,那將是非常棒的:http://area51.stackexchange.com/proposals/46387/expressionengine?referrer=AwnV9oYF5EKlETXKp3ZQQw2(我們需要超過200個代表的人) –

+0

感謝Scott。 – Gareth

3

您可以在您的system/expressionengine/config/config.php文件中使用PHP來動態設置{site_url}配置,包括協議。事情是這樣的:

// Detect protocol and server host 
$protocol = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 
$base_url = $protocol . $_SERVER['HTTP_HOST']; 

// Set EE index page 
$config['index_page'] = ""; 

// Set base and site URL 
$config['base_url'] = $base_url . "/" . $config['index_page']; 
$config['site_url'] = $config['base_url']; 

您可以從這個基礎上在config.php建立你的主題的路徑,不同的圖像路徑,上傳路徑等所有。但$config['site_url']是什麼影響{path=""}{stylesheet}標籤的輸出。

有關更多建議,請參見NSM's Config Bootstrap file或文章Configuring ExpressionEngine for multiple servers。對於所有的路徑,你可以在config.php設置,見EE2 Config Overrides

6

很少有人知道,你可以使用相對協議網址的資產

例子:

<link rel="stylesheet" href="//www.site.com/site.css"> 
<script type="text/javascript" src="//www.site.com/site.js"></script> 

如果瀏覽器觀看在頁面SSL通過HTTPS,然後它會使用https協議請求該資產,否則它會通過HTTP請求該資產。

這防止了可怕的「此頁包含安全和不安全的項目」,在IE瀏覽器的錯誤信息,保持相同的協議內所有資產的請求。從here

更多信息:

相對URL沒有一個方案(HTTP: 或https :)是有效的,每RTF 3986: 4.2節。如果一個客戶端扼殺它, 那麼這是客戶端的錯,因爲 他們不符合在RFC中指定的URI 語法。

你的例子是有效的,應該工作。 我已經使用了相對URL方法 ,我自己在大量被販運的網站上,並且 沒有投訴。此外,我們 測試我們的網站在Firefox,Safari, IE6,IE7和Opera。這些瀏覽器全部都是 瞭解URL格式

+0

這是一個很好和優雅的解決方案!但要小心:EE顯然不希望以這種方式設置site_url,FWIW。 –

+0

感謝這Deviarte,我猜如果你想在你的模板中使用一個全局變量,你只需要創建一個使用//www.site.com的因爲標準{site_url}只輸出http? – Gareth

0

我用的是Nginx。

我不知道爲什麼,但如果我使用絕對URL(完整路徑)而不是相對(/)來啓動字段as CreateSean said,//以啓動協議字符串as Deviarte said)(或者是他們與相對URL加載慢?我不知道。)。 Ergo,他們的解決方案/實踐(我曾經做過的事情,現在仍然如此)都不適合我的環境。

相反,我所做的是在config.php文件中的以下內容:

$config['base_url'] = $_SERVER["scheme_url"]; 
$config['site_url'] = $_SERVER["scheme_url"]; 

請注意,您可能需要提供PHP與scheme_url如果它不存在。

fastcgi_param scheme_url "$scheme://$host/"; 

編輯:

在引導環顧/ CONFIGS有的使用。如果你像我一樣正在使用PHP-FPM需要在你的nginx的站點配置(一個或多個),其中爲/只添加到您的配置前面加上協議到配置變量的方法(例如,comment by unexplainedBacn above)。在Nginx是由默認情況下沒有HTTPS服務器變量,在對PHP虛擬主機配置下SSL添加以下內容:

fastcgi_param HTTPS on; 
1

所有,

這是我如何使用Apache和config.php文件到重寫URL以免觸發瀏覽器的'非SSL內容警告'。我仍然使用{}路徑,在我的模板{}樣式表變量,因爲他們做的太好錯過:)

在Apache的htaccess文件:

# Set an Apache 'site_url' variable to http when accessed via http: 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ - [E=site_url:http://mysite.com] 


# Set Apache 'site_url' variable to https when accessed via https 
RewriteCond %{SERVER_PORT} 443 
RewriteRule ^(.*)$ - [E=site_url:https://mysite.com] 

然後在系統/ expressionengine/config.php文件

以下兩行添加到您的代碼(確保你沒有在配置文件中的其他地方設置這些變量)

$config['base_url'] = $_SERVER["site_url"]; 
$config['site_url'] = $_SERVER["site_url"]; 

據我瞭解,在SITE_URL變量是什麼EE使用爲{}樣式表和EE {}的路徑。

諺語「最後一件事」:

如果你仍然得到非SSL警告,只是查看源代碼,並搜索的「http://」在你的來源。這些是罪魁禍首。它們是硬編碼的鏈接,它們沒有使用base_url/site_url變量進行設置。

你需要找到你的文章/模板/變量/段的HTTP調用,代之以簡單//這些電話。
所以要

http://example.com/some_file.html 

一個電話,現在應該是這樣的:

//example.com/some_file.html. 

這適用於絕對和相對URL。

對於您設置爲EE文件上傳目錄的路徑也是如此。確保修改這些目錄的URL看起來像這樣

//example.com/path/to/your/upload/directory 

瞧,你要善於去:)