今天我發現,如果您訪問使用文檔頭中css鏈接路徑中的{site_url}標記的EE網站,則該網站無法加載CSS文件如果你輸入https而不是http。HTTPS和HTTP ExpressionEngine網站URL標記
我已經通過使用一個htaccess文件強制到http上,但我只是想知道是否有一個EE內的設置,你可以改變,使兩個工作?
這隻發生在Chrome瀏覽器和IE瀏覽器上,我猜想取決於您的瀏覽器設置爲允許安全明智。
今天我發現,如果您訪問使用文檔頭中css鏈接路徑中的{site_url}標記的EE網站,則該網站無法加載CSS文件如果你輸入https而不是http。HTTPS和HTTP ExpressionEngine網站URL標記
我已經通過使用一個htaccess文件強制到http上,但我只是想知道是否有一個EE內的設置,你可以改變,使兩個工作?
這隻發生在Chrome瀏覽器和IE瀏覽器上,我猜想取決於您的瀏覽器設置爲允許安全明智。
當我加載CSS和JS我從來沒有使用域,我只是相對設置它。例如:
<link rel="stylesheet" href="/layout/styles/layout.css" >
如果您嘗試這樣做是否奏效?
我在這個問題上得到了一些很大的幫助previously。我希望現在也對你有用。
嘿斯科特 - 我們注意到,您有幾個EE問題的幫助。如果你可以在這裏支持我們的EE堆棧交換提議,那將是非常棒的:http://area51.stackexchange.com/proposals/46387/expressionengine?referrer=AwnV9oYF5EKlETXKp3ZQQw2(我們需要超過200個代表的人) –
感謝Scott。 – Gareth
您可以在您的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
很少有人知道,你可以使用相對協議網址的資產
例子:
<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格式
這是一個很好和優雅的解決方案!但要小心:EE顯然不希望以這種方式設置site_url,FWIW。 –
感謝這Deviarte,我猜如果你想在你的模板中使用一個全局變量,你只需要創建一個使用//www.site.com的因爲標準{site_url}只輸出http? – Gareth
我用的是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;
所有,
這是我如何使用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
瞧,你要善於去:)
Gareth可能會使用{stylesheet =}來獲得這個優點,在這種情況下,他提到的行爲會顯示出來。 –
嗨肖恩是的,工作得很好,這是我最終做的。上面的Deviarte答案看起來像一個有趣的解決方案? – Gareth