base_url para http e https?

7

Eu tenho um site que pode ser acessado por http e https. Vejo que a análise de segurança reclama que base_urlnão está definida em settings.php.

No entanto, quando eu o defino como http://example.come libero todos os caches, meu modelo em https não é renderizado.

Quando eu comento a $base_urllinha, settings.phptudo volta ao normal.

Como posso resolver esse problema?

Vá, faça
fonte
Eu só ia fazer essa pergunta. O problema é que a maioria dos navegadores bloqueia conteúdo não seguro ao solicitar sobre SSL. Portanto, se seu base_url for example.com, mas você acessar o site via example.com, seu navegador não carregará seus arquivos de tema. O módulo "Páginas seguras", drupal.org/project/securepages , acredito, permite definir um base_url seguro e não seguro, embora esse módulo esteja atualmente na versão beta.
Screenack
Para sua informação, apenas testei páginas seguras. Ele define um base_url seguro e não seguro, mas o global_url ainda é válido para os recursos do tema. Então, não, não é uma solução.
Screenack

Respostas:

5

Você provavelmente precisa fazer algo assim:

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

... para que o Drupal saiba qual protocolo usar, dependendo de como o site foi acessado.

colan
fonte
3

Eu tive sorte com:

$base_url = '//mysite.com';  

Além disso, para manter o cookie da sessão, eu normalmente adiciono:

$conf['https'] = TRUE;

o que permite o modo misto.

DaveD - Pensamento no BackOffice
fonte
Esta resposta está correta, deve ser marcada como tal.
Rolando Isidoro
Esta resposta está incorreta, pois faz com que tudo url('path', array('absolute'=>TRUE));seja renderizado como //mysite.com/path. Você deve usar a abordagem de @ colan em vez desta.
Zaporylie 12/12/16
Esta resposta também pode interromper o logon no chrome. A resposta de @ colan é a resposta correta.
jenlampton
2

Isso funciona bem para mim com vários domínios na mesma instalação do Drupal sobre 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'];
}

Assim, ele também funciona bem com o SSL flexível CloudFlare. Eu posso acessar o site com e sem SSL.

(Parece que você não precisa do módulo Cloudflare, mas também não seria prejudicial habilitá-lo.)

kqw
fonte
Se você usar apenas o cabeçalho do host enviado, não tenho certeza se definir o $ base_url vale a pena neste momento, porque o Drupal o detectará automaticamente se você não o especificar.
19716 Brian
Welkom (terug) em het land van 1K ... use os privilégios que o acompanham com sabedoria!
Pierre.Vriens
0

Infelizmente, o problema com a configuração do protocolo relativo à URL acessada é que o site apenas faz referência a isso ao criar os arquivos em cache e, portanto, cria todas as referências a arquivos e recursos com base no protocolo usado na reconstrução do cache do site.

Portanto, se você reconstruir o cache a partir de https, todos os links serão https. Se você recriar o site a partir de http, todos os links serão http.

A reconstrução do https funciona melhor, mas os navegadores ainda podem bloquear o conteúdo seguro e exigir que os usuários permitam manualmente o conteúdo bloqueado.

Michael Myers
fonte