Тег 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
и вуаля, вы должны хорошо идти:)