base_url pour http et https?

7

J'ai un site accessible à la fois via http et https. Je vois que l' examen de sécurité se plaint qui base_urln'est pas défini dans settings.php.

Cependant, lorsque je le définis comme http://example.comet que je vide tous les caches, mon modèle en https n'est pas rendu.

Quand je commente la $base_urlligne, settings.phptout revient à la normale.

Comment puis-je résoudre ce problème?

Va faire
la source
J'allais juste poser cette question. Le problème est que la plupart des navigateurs bloquent le contenu non sécurisé lors de la demande via SSL. Donc, si votre base_url est example.com mais que vous accédez ensuite au site via example.com, votre navigateur ne chargera pas vos fichiers de thème. Le module "Secure Pages", drupal.org/project/securepages je crois, vous permet de définir une base_url sécurisée et non sécurisée, bien que ce module soit actuellement en version bêta.
Screenack
Pour info, vient de tester les pages sécurisées. Il définit une base_url sécurisée et non sécurisée, mais la base_url globale est toujours valable pour les ressources de thème. Donc, non, pas une solution.
Screenack

Réponses:

5

Vous devez probablement faire quelque chose comme ceci:

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

... afin que Drupal sache quel protocole utiliser en fonction de la façon dont le site a été consulté.

colan
la source
3

J'ai eu de la chance avec:

$base_url = '//mysite.com';  

Aussi, pour maintenir le cookie de session, j'ajoute généralement:

$conf['https'] = TRUE;

qui permet un mode mixte.

DaveD - Pensée BackOffice
la source
Cette réponse est correcte, elle doit être marquée comme telle.
Rolando Isidoro
Cette réponse est incorrecte car elle rend tout url('path', array('absolute'=>TRUE));comme //mysite.com/path. Vous devriez utiliser l'approche de @ colan plutôt que celle-ci.
zaporylie
Cette réponse peut également interrompre la connexion sur Chrome. La réponse de @ colan est la bonne réponse.
jenlampton
2

Cela fonctionne bien pour moi avec plusieurs domaines sur la même installation Drupal sur 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'];
}

Comme cela, il fonctionne également bien avec SSL flexible CloudFlare. Je peux accéder au site avec et sans SSL.

(Il semble que vous n'ayez pas besoin du module Cloudflare mais cela ne ferait pas de mal non plus de l'activer.)

kqw
la source
Si vous allez simplement utiliser l'en-tête d'hôte envoyé, je ne suis pas sûr que la définition de $ base_url en vaille la peine, car Drupal le détectera automatiquement si vous ne le spécifiez pas.
Brian
Welkom (terug) dans het land van 1K ... utilisez judicieusement les privilèges qui l'accompagnent!
Pierre.Vriens
0

Malheureusement, le problème lié à la définition du protocole par rapport à l'URL accessible est que le site ne fait référence qu'à cela lors de la création des fichiers mis en cache et crée donc toutes les références aux fichiers et aux ressources en fonction du protocole utilisé lors de la reconstruction du cache du site.

Donc, si vous reconstruisez le cache à partir de https, tous les liens sont https. Si vous reconstruisez le site à partir de http, tous les liens sont http.

La reconstruction à partir de https fonctionne mieux, mais les navigateurs peuvent toujours bloquer le contenu sécurisé et peuvent demander aux utilisateurs d'autoriser manuellement le contenu bloqué.

Michael Myers
la source