http和https的base_url?


7

我有一个可以通过http和https访问的网站。我看到安全审查中抱怨的base_url未定义settings.php

但是,当我将其定义为http://example.com并刷新所有缓存时,不会呈现https中的模板。

当我注释掉所有内容后$base_urlsettings.php一切恢复正常。

我该如何解决这个问题?


我只是想问这个问题。问题在于,大多数浏览器在通过SSL请求时都会阻止不安全的内容。因此,如果您的base_url是example.com,但是随后您通过example.com访问该网站,则您的浏览器将不会加载主题文件。我相信“安全页面”模块drupal.org/project/securepages允许您定义一个安全和不安全的base_url,尽管该模块目前处于测试阶段。
Screenack

仅供参考,仅测试了安全页面。它设置了一个安全和非安全的base_url,但是全局base_url仍然保留主题资源。所以,不,不是解决方案。
Screenack

Answers:


5

您可能需要执行以下操作:

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

...以便Drupal可以根据访问网站的方式知道使用哪种协议。


3

我很幸运:

$base_url = '//mysite.com';  

另外,为了维护会话cookie,我通常添加:

$conf['https'] = TRUE;

允许混合模式。


这个答案是正确的,应该这样标记。
Rolando Isidoro 2015年

这是错误的答案,因为它使所有内容都url('path', array('absolute'=>TRUE));呈现为//mysite.com/path。您应该使用@colan的方法而不是这种方法。
zaporylie

此答案也可能会中断chrome上的登录。@colan的答案是正确的答案。
jenlampton

2

通过CloudFlare在同一Drupal安装上的多个域中,这对我来说效果很好:

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

这样,它也可以与CloudFlare灵活SSL配合使用。无论是否使用SSL,我都可以访问该网站。

(似乎您不需要Cloudflare模块,但启用它也不会受到损害。)


如果您只想使用发送的主机头,那么现在不确定是否设置$ base_url是否值得,因为如果您不指定它,Drupal会自动检测到它。
布赖恩

湿地货车1K中的Welkom(terug)...明智地使用它附带的特权!
Pierre.Vriens'17年

0

不幸的是,相对于所访问的URL设置协议的问题在于,该站点仅在构建缓存文件时引用该引用,因此,根据重建站点缓存时使用的协议,创建对文件和资源的所有引用。

因此,如果您从https重建缓存,则所有链接均为https。如果从http重建站点,则所有链接均为http。

从https重建的效果最好,但是浏览器可能仍会阻止安全内容,并可能要求用户手动允许被阻止的内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.