base_url para http y https?


7

Tengo un sitio al que se puede acceder a través de http y https. Veo que la revisión de seguridad se queja de que base_urlno está definida en settings.php.

Sin embargo, cuando lo defino como http://example.comy vacío todos los cachés, mi plantilla en https no se representa.

Cuando comento la $base_urllínea, settings.phptodo vuelve a la normalidad.

¿Como puedo resolver este problema?


Solo iba a hacer esta pregunta. El problema es que la mayoría de los navegadores bloquearán contenido inseguro cuando soliciten a través de SSL. Entonces, si su base_url es example.com pero luego accede al sitio a través de example.com, su navegador no cargará sus archivos de tema. El módulo "Páginas seguras", drupal.org/project/securepages , creo, le permite definir una base_url segura y no segura, aunque ese módulo está actualmente en versión beta.
Screenack

Para su información, acabo de probar las páginas seguras. Establece una base_url segura y no segura, pero la base_url global sigue siendo válida para los recursos del tema. Entonces, no, no es una solución.
Screenack

Respuestas:


5

Probablemente necesites hacer algo como esto:

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

... para que Drupal sepa qué protocolo usar dependiendo de cómo se accedió al sitio.


3

He tenido suerte con:

$base_url = '//mysite.com';  

Además, para mantener la cookie de sesión, generalmente agrego:

$conf['https'] = TRUE;

que permite el modo mixto.


Esta respuesta es correcta, debe marcarse como tal.
Rolando Isidoro

Esta respuesta es incorrecta ya que hace que todo url('path', array('absolute'=>TRUE));se represente como //mysite.com/path. Debería usar el enfoque de @ colan en lugar de este.
zaporylie

Esta respuesta también puede interrumpir el inicio de sesión en Chrome. La respuesta de @ colan es la respuesta correcta.
jenlampton

2

Esto funciona bien para mí con varios dominios en la misma instalación de 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'];
}

De esta manera, también funciona bien con SSL flexible de CloudFlare. Puedo acceder al sitio con y sin SSL.

(Parece que no necesita el módulo Cloudflare, pero tampoco estaría de más habilitarlo).


Si solo va a usar el encabezado de host enviado, no estoy seguro de que valga la pena $ base_url en este punto, porque Drupal lo detectará automáticamente si no lo especifica.
Brian

Welkom (terug) en la furgoneta de tierra 1K ... ¡usa los privilegios que vienen con sabiduría!
Pierre.Vriens

0

Desafortunadamente, el problema con la configuración del protocolo en relación con la URL a la que se accede es que el sitio solo hace referencia a eso al construir los archivos en caché y, por lo tanto, crea todas las referencias a archivos y recursos según el protocolo que se utiliza al reconstruir la caché del sitio.

Entonces, si reconstruye el caché desde https, entonces todos los enlaces son https. Si reconstruye el sitio desde http, todos los enlaces son http.

La reconstrucción a partir de https funciona mejor, pero los navegadores aún pueden bloquear el contenido seguro y pueden requerir que los usuarios permitan manualmente el contenido bloqueado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.