HTTPS & HTTP ExpressionEngine URL маркер на сайта

Днес разбрах, че ако посетите сайт на EE, който използва маркера {site_url} в пътя на css връзката в главата на документа, сайтът не може да зареди CSS файла, ако въведете https, а не http.

Заобиколих това, като използвах файл htaccess, за да накарам http, но просто се чудех дали има настройка в EE, която можете да промените, за да работят и двете?

Това се случи само в Chrome и IE, предполагам, че зависи от това какво е настроен браузърът ви, за да позволява сигурност.


person Gareth    schedule 02.11.2012    source източник


Отговори (6)


Когато зареждам CSS и JS, никога не използвам домейна, просто го задавам относително. например:

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

Ако опитате това работи ли?

person CreateSean    schedule 02.11.2012
comment
Гарет може да използва {stylesheet=}, за да се възползва от предимствата на това, в който случай поведението, което споменава, ще се появи. - person Scott Hepler; 02.11.2012
comment
Здравей, Шон, да, това работи добре и това е, което накрая направих. Отговорът на Deviarte по-горе изглежда като интересно решение? - person Gareth; 07.11.2012

Получих голяма помощ за този проблем преди. Надявам се, че и на вас е полезно сега.

person Scott Hepler    schedule 02.11.2012
comment
Хей, Скот - забелязах, че си помогнал с няколко въпроса за EE. Би било страхотно, ако можете да подкрепите нашето предложение за EE Stack Exchange тук: area51.stackexchange.com/proposals/46387 / (имаме нужда от хора с над 200 повторения) - person Adrian Macneil; 05.11.2012

Малко хора знаят, че можете да използвате свързани с протокол URL адреси за активи

Пример:

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

Ако браузърът преглежда страница в SSL през HTTPS, тогава той ще поиска този актив с https протокола, в противен случай ще го поиска с HTTP.

Това предотвратява онова ужасно съобщение за грешка „Тази страница съдържа както защитени, така и незащитени елементи“ в IE, запазвайки всички ваши заявки за активи в рамките на един и същи протокол.

повече информация от тук:

Относителен URL без схема (http: или https:) е валиден, съгласно RTF 3986: Раздел 4.2. Ако клиент се задави от него, това е грешката на клиента, защото не отговаря на URI синтаксиса, посочен в RFC.

Вашият пример е валиден и трябва да работи. Самият аз съм използвал този относителен URL метод на силно трафикирани сайтове и нямам оплаквания. Освен това тестваме нашите сайтове във Firefox, Safari, IE6, IE7 и Opera. Всички тези браузъри разбират този URL формат

person Victor Gutierrez    schedule 02.11.2012
comment
Това е едно добро и елегантно решение! Но внимавайте: EE очевидно не харесва site_url да е настроен по този начин, FWIW. - person Scott Hepler; 03.11.2012
comment
Благодаря за това Deviarte, предполагам, че ако тогава искате да използвате глобална променлива във вашите шаблони, просто ще трябва да създадете такава, която използва //www.site.com, защото стандартният {site_url} просто извежда http? - person Gareth; 07.11.2012

Можете да използвате PHP във вашия system/expressionengine/config/config.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} тагове.

За повече идеи вижте файла Config Bootstrap на NSM или статията Конфигуриране на ExpressionEngine за множество сървъри. За всички пътища, които можете да зададете в config.php, вижте Config_Overrides" rel="nofollow">EE2 Config Overrides

person unexplainedBacn    schedule 02.11.2012

Използвам Nginx.

Не знам защо, но ресурсите се зареждат значително по-бързо в различни браузъри, ако използвам абсолютни URL адреси (пълния път) вместо относителни (/ за започване на низа в домейна както каза CreateSean, // за стартиране на низа в протокола както каза Deviarte) (или се зареждат по-бавно с относителни URL адреси? Не знам.). Следователно, нито едно от техните решения/практики (и двете неща, които правех... и все още правя) не са за предпочитане за моите среди в наши дни.

Вместо това това, което направих, е следното в config.php:

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

Моля, имайте предвид, че може да се наложи да предоставите на PHP схема_url, ако още не съществува. Ако като мен използвате php-fpm, просто добавете това към вашата конфигурация като/където е необходимо в конфигурацията(ите) на вашия nginx сайт:

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

редактиране:

Разглеждайки bootstrap/configs и някои използват метода за добавяне на протокола към конфигурационните променливи (напр. коментар от unexplainedBacn по-горе ). В Nginx по подразбиране няма HTTPS сървърна променлива, в конфигурацията на вашия виртуален хост за php под ssl добавете следното:

    fastcgi_param   HTTPS   on; 
person notacouch    schedule 08.11.2012

Всичко,

Ето как използвах Apache и файла Config.php, за да пренапиша URL адресите, така че да не задействам „предупреждения за не-SSL съдържание“ от браузърите. Все още използвам променливите {path} и ​​{stylesheet} в шаблоните си, защото са твърде добри, за да ги пропусна :)

Във файла htaccess на Apache:

# 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]

След това в system/expressionengine/config.php

Добавете следните два реда към вашия код (уверете се, че не сте задали тези променливи другаде в конфигурационния файл)

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

Доколкото разбирам, променливата site_url е това, което EE използва за {stylesheets} и {paths} в 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

И готово, трябва да сте готови :)

person Benjamin Mailian    schedule 21.02.2013