Тег URL сайта https & HTTP ExpressionEngine

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

Я обошел это, используя файл htaccess для принудительного использования http, но мне просто интересно, есть ли настройка в EE, которую вы можете изменить, чтобы оба работали?

Это произошло только в Chrome и IE, я предполагаю, зависит от того, что ваш браузер разрешает безопасности мудрым.

6 ответов


когда я загружаю CSS и JS, я никогда не использую домен, я просто устанавливаю его относительно. например:

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

Если вы попробуете это, это работает?


Я получил большую помощь по этой проблеме ранее. Я надеюсь, что теперь это будет полезно и вам.


мало кто знает, что вы можете использовать относительный URL-адрес протокола для активов

пример:

<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, сохраняя все ваши запросы активов в одном протоколе.

больше информации здесь:

относительный URL без схемы (http: или https:) действителен, в RTF 3986: Раздел 4.2. Если клиент подавится этим, тогда это вина клиента, потому что они не соблюдают URI синтаксис, указанный в RFC.

ваш пример действителен и должен работать. Я использовал этот относительный метод URL себя на сильно торгуемых сайтах и ноль жалоб. Кроме того, мы протестируйте наши сайты в Firefox, Safari, ИЕ6, IE7 и Opera. Эти браузеры все понимаю, что формат URL


вы можете использовать PHP в своем system/expressionengine/config/config.php файл для динамического задания конфигурации {site_url}, включая протокол. Что-то вроде этого:--8-->

// 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. Но!--3--> - это то, что влияет на вывод {path=""} и {stylesheet} теги.

дополнительные идеи см. В разделе файл начальной загрузки конфигурации NSM артикул настройка ExpressionEngine для нескольких серверы. Для всех путей, которые вы можете установить в config.php см. ЕЕ2 конфиг переопределяет


я использую Nginx.

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

вместо этого я сделал следующее в config.на PHP:

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

обратите внимание, что вам может потребоваться предоставить PHP scheme_url, если он еще не существует. Если вы используете PHP-МПФ просто добавить к вашей конфигурации как/где нужно в конфиге nginx сайт(ы):

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

edit:

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

    fastcgi_param   HTTPS   on; 

все,

вот как я использовал 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 использует для {таблиц стилей} и {путей} в 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

и вуаля, вы должны хорошо идти:)