base_url für http und https?

7

Ich habe eine Website, auf die sowohl über http als auch über https zugegriffen werden kann. Ich sehe die Sicherheitsüberprüfung Beschwerden, base_urldie nicht in definiert ist settings.php.

Wenn ich es jedoch als definiere http://example.comund alle Caches leere, wird meine Vorlage in https nicht gerendert.

Wenn ich die $base_urlZeile auskommentiere, wird settings.phpalles wieder normal.

Wie kann ich dieses Problem lösen?

Godo
quelle
Ich wollte nur diese Frage stellen. Das Problem ist, dass die meisten Browser unsichere Inhalte blockieren, wenn sie über SSL anfordern. Wenn Ihre base_url also example.com ist und Sie dann über example.com auf die Site zugreifen, lädt Ihr Browser Ihre Themendateien nicht. Mit dem Modul "Sichere Seiten", drupal.org/project/securepages , können Sie meiner Meinung nach eine sichere und nicht sichere base_url definieren, obwohl sich dieses Modul derzeit in der Beta befindet.
Screenack
Zu Ihrer Information, gerade getestete sichere Seiten. Es wird eine sichere und nicht sichere base_url festgelegt, die globale base_url gilt jedoch weiterhin für Themenressourcen. Also nein, keine Lösung.
Screenack

Antworten:

5

Sie müssen wahrscheinlich so etwas tun:

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

... damit Drupal weiß, welches Protokoll verwendet werden soll, je nachdem, wie auf die Site zugegriffen wurde.

colan
quelle
3

Ich hatte Glück mit:

$base_url = '//mysite.com';  

Um das Sitzungscookie beizubehalten, füge ich normalerweise Folgendes hinzu:

$conf['https'] = TRUE;

Dies ermöglicht einen gemischten Modus.

DaveD - BackOffice Denken
quelle
Diese Antwort ist richtig, sie sollte als solche gekennzeichnet sein.
Rolando Isidoro
Diese Antwort ist falsch, da alle url('path', array('absolute'=>TRUE));als gerendert werden //mysite.com/path. Sie sollten eher den Ansatz von @ colan als diesen verwenden.
Zaporylie
Diese Antwort kann auch die Anmeldung auf Chrome unterbrechen. Die Antwort von @ colan ist die richtige Antwort.
Jenlampton
2

Dies funktioniert gut für mich mit mehreren Domains auf derselben Drupal-Installation über 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'];
}

So funktioniert es auch gut mit CloudFlare Flexible SSL. Ich kann mit und ohne SSL auf die Site zugreifen.

(Es scheint, dass Sie das Cloudflare-Modul nicht benötigen, aber es würde auch nicht schaden, es zu aktivieren.)

kqw
quelle
Wenn Sie nur den gesendeten Host-Header verwenden, ist es nicht sicher, ob sich das Festlegen von $ base_url an dieser Stelle überhaupt lohnt, da Drupal ihn automatisch erkennt, wenn Sie ihn nicht angeben.
Brian
Welkom (terug) im Land van 1K ... nutzen Sie die damit verbundenen Privilegien mit Bedacht!
Pierre.Vriens
0

Leider besteht das Problem beim Festlegen des Protokolls in Bezug auf die URL, auf die zugegriffen wird, darin, dass die Site beim Erstellen der zwischengespeicherten Dateien nur auf diese verweist und daher alle Verweise auf Dateien und Ressourcen basierend auf dem Protokoll erstellt, das beim Wiederherstellen des Site-Cache verwendet wird.

Wenn Sie also den Cache aus https neu erstellen, sind alle Links https. Wenn Sie die Site von http aus neu erstellen, sind alle Links http.

Das Wiederherstellen von https funktioniert am besten, aber Browser blockieren möglicherweise immer noch den sicheren Inhalt und erfordern möglicherweise, dass Benutzer den blockierten Inhalt manuell zulassen.

Michael myers
quelle