base_url для http и https?


7

У меня есть сайт, который доступен как через http и https. Я вижу жалобу на проверку безопасности, которая base_urlне определена в settings.php.

Однако когда я определяю его как http://example.comи очищаю все кэши, мой шаблон в https не отображается.

Когда я закомментирую $base_urlстроку, settings.phpвсе приходит в норму.

Как я могу решить эту проблему?


Я просто собирался задать этот вопрос. Проблема заключается в том, что большинство браузеров блокируют небезопасный контент при запросе через SSL. Поэтому, если ваш base_url - example.com, но вы затем заходите на сайт через example.com, ваш браузер не будет загружать файлы вашей темы. Я считаю, что модуль «Защищенные страницы», drupal.org/project/securepages , позволяет вам определить безопасный и незащищенный base_url, хотя этот модуль в настоящее время находится в стадии бета-тестирования.
Screenack

К вашему сведению, только что проверил защищенные страницы. Он устанавливает безопасный и небезопасный base_url, но глобальный base_url все еще сохраняется для ресурсов темы. Так что нет, не решение.
Screenack

Ответы:


5

Вам, вероятно, нужно сделать что-то вроде этого:

$protocol = (!empty($_SERVER['HTTPS'])) ? 'https' : 'http';
$base_url = $protocol . '://mysite.com';

... так что Drupal знает, какой протокол использовать, в зависимости от того, как сайт был доступен.


3

Мне повезло с:

$base_url = '//mysite.com';  

Кроме того, чтобы сохранить cookie сессии, я обычно добавляю:

$conf['https'] = TRUE;

что позволяет смешанный режим.


Этот ответ правильный, он должен быть помечен как таковой.
Роландо Исидоро

Это неверный ответ, так как он делает все url('path', array('absolute'=>TRUE));как //mysite.com/path. Вы должны использовать подход @ colan, а не этот.
Запорылье

Этот ответ также может нарушить вход в систему в Chrome. @ Колан ответ правильный ответ.
Дженламптон

2

Это хорошо работает для меня с несколькими доменами в одной установке Drupal через CloudFlare:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
  $base_url = $_SERVER["HTTP_X_FORWARDED_PROTO"] . '://' . $_SERVER['HTTP_HOST'];
} else {
  $base_url = 'http://' . $_SERVER['HTTP_HOST'];
}

Подобно этому, он также хорошо работает с гибким SSL CloudFlare. Я могу получить доступ к сайту как с SSL, так и без него.

(Кажется, вам не нужен модуль Cloudflare, но это не помешало бы и его включить.)


Если вы просто собираетесь использовать любой отправленный заголовок хоста, я не уверен, что установка $ base_url даже стоит того, потому что Drupal автоматически обнаружит его, если вы его не укажете.
Брайан

Welkom (terug) в het land van 1K ... используйте привилегии, которые идут с ним с умом!
Pierre.Vriens

0

К сожалению, проблема с настройкой протокола относительно URL-адреса, к которому осуществляется доступ, заключается в том, что сайт ссылается только на это при построении кэшированных файлов, и поэтому создает все ссылки на файлы и ресурсы на основе того, какой протокол используется при восстановлении кэша сайта.

Итак, если вы перестраиваете кеш из https, тогда все ссылки будут https. Если вы перестроите сайт с http, то все ссылки будут http.

Восстановление из https работает лучше, но браузеры могут по-прежнему блокировать защищенный контент и могут потребовать, чтобы пользователи вручную разрешили заблокированный контент.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.