Ich verwende eine Drupal 8-Website, und wenn ich zu einer Seite navigiere, wird eine einfache weiße Seite mit der folgenden Fehlermeldung angezeigt.
Der angegebene Hostname ist für diesen Server nicht gültig.
Was bedeutet das? Wie behebe ich das?
Ich verwende eine Drupal 8-Website, und wenn ich zu einer Seite navigiere, wird eine einfache weiße Seite mit der folgenden Fehlermeldung angezeigt.
Der angegebene Hostname ist für diesen Server nicht gültig.
Was bedeutet das? Wie behebe ich das?
Antworten:
Diese Fehlermeldung stammt von einer Funktion , die Drupal 8 zum Schutz vor HTTP-Host-Header-Angriffen hinzugefügt wurde . Die Funktion wird auch im Änderungsdatensatz beschrieben , der für den Patch generiert wurde.
Im Wesentlichen war es möglich, den HTTP-Host-Header für schändliche Zwecke zu fälschen und Drupal dazu zu verleiten, in mehreren Subsystemen (insbesondere bei der Link-Generierung) einen anderen Domain-Namen zu verwenden. Mit anderen Worten, der HTTP-Host-Header muss als Benutzereingabe betrachtet werden und ist nicht vertrauenswürdig.
Um dem entgegenzuwirken $settings['trusted_host_patterns']
, wurde Drupal 8 eine neue Einstellung hinzugefügt, um eine Liste "vertrauenswürdiger" Hostnamen zu konfigurieren, auf denen die Site ausgeführt werden kann. Die Einstellung muss ein Array von Mustern für reguläre Ausdrücke ohne Begrenzer sein, die die Hostnamen darstellen, deren Ausführung Sie zulassen möchten.
Wenn Sie Ihre Site beispielsweise von einem einzigen Hostnamen "www.example.com" aus betreiben, sollten Sie diesen zu Ihren Einstellungen hinzufügen (normalerweise zu finden unter ./sites/default/settings.php
):
$settings['trusted_host_patterns'] = array(
'^www\.example\.com$',
);
Beachten Sie ^
, \.
und $
. Dies ist die PCRE-Syntax . Dies bedeutet nur, dass Sie "www.example.com" genau zuordnen möchten, ohne dass am Anfang und am Ende etwas anderes hinzukommt, und dass die Punkte als Punkte und nicht als Platzhalterzeichen behandelt werden sollen.
Wenn Sie von "example.com" ausführen, verwenden Sie einfach:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
);
Wenn Sie eine Site mit mehreren Domänen und / oder Unterdomänen ausführen müssen und keine kanonische URL-Umleitung durchführen, sieht Ihre Einstellung folgendermaßen aus:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
'^.+\.example\.com$',
'^example\.org',
'^.+\.example\.org',
);
Auf diese Weise kann die Site alle Varianten von example.com und example.org ausführen, einschließlich aller Unterdomänen.
Sobald Sie $settings['trusted_host_patterns']
den richtigen Wert eingestellt haben, sollten Sie wieder zu Ihrer Site navigieren können.
Sie können den Status Ihrer Einstellungen für vertrauenswürdige Hosts auch auf der Statusberichtsseite unter admin / reports / status überprüfen
Wenn Sie die Einstellung vollständig entfernen, wird der vertrauenswürdige Hostmechanismus nicht verwendet, und auf der Seite mit dem Statusbericht wird ein Fehler angezeigt. Darüber hinaus ist Ihre Site möglicherweise auch anfällig für HTTP-Host-Header-Angriffe.
Wenn Sie diese Einstellung konfiguriert haben und diese Meldung sehen, bedeutet dies wahrscheinlich, dass Sie die Syntax für reguläre Ausdrücke durcheinander gebracht haben. Nehmen Sie in diesem Fall das erste Beispiel, kopieren Sie es / fügen Sie es in Ihre Einstellungen ein und bearbeiten Sie es, um den Hostnamen wiederzugeben, unter dem Ihre Site ausgeführt wird.
Für die Installation von localhost können Sie den folgenden Code in Ihrer settings.php-Datei verwenden
$settings['trusted_host_patterns'] = array(
'^localhost$','^YOUR_IP_ADDRESS$'
);
Dies geschieht, weil trusted_host_patterns
Variable in Ihrer Einstellungsdatei. Wenn Sie in der lokalen Umgebung arbeiten und diese überschreiben möchten, definieren Sie den folgenden Abschnitt in Ihrer settings.local.php
Datei:
/*
* Drupal Trusted Host Patterns
*/
$settings['trusted_host_patterns'] = [];
Oder allgemeineres Muster :
$settings['trusted_host_patterns'] = [ '.*' ];
Oder spezifischer für die lokalen Umgebungen :
$settings['trusted_host_patterns'] = array(
'^172\.20.\0.\3$',
'^localhost$',
);
Dies ist die einfachste Lösung, wird jedoch nicht empfohlen, da Sie die richtigen Werte festlegen sollten, um zu vermeiden, dass der HTTP-Host-Header für schändliche Zwecke gefälscht wird. Wenn Ihre Website nur auf Ihrem lokalen Server ausgeführt wird, sollte es Ihnen gut gehen.
Siehe: Neue Einstellung für die Konfiguration von vertrauenswürdigen Hostnamen .
Dieses Problem tritt auch bei Ihnen auf
<VirtualHost *:443>
wann solltest du haben
<VirtualHost *:80>
Richten Sie es in einem Nicht-SSL-Setup ein (z. B. für Entwickler- / Testumgebungen) und versuchen Sie, über Port 80 auf die Site zuzugreifen
Dies liegt an der Konfiguration des vertrauenswürdigen Hosts des Servers. Es kann produzieren, wenn Sie den Domainnamen oder ändern 'trusted_host_patterns'
. Um die Probleme zu beheben, fügen Sie Ihre neue Domain auf die DRUPAL_ROOT/sites/SITE_FOLDER/settings.php
(Ex: sites/defaults/settings.php
)
Beispiel: Domain name = newdomain.com
$settings['trusted_host_patterns'] = array(
'^newdomain.com\.loc$',
'^www\.newdomain.com\.loc$',
);