J'utilise un site Web Drupal 8 et, lorsque je navigue sur une page, une page blanche s'affiche avec le message d'erreur suivant.
Le nom d'hôte fourni n'est pas valide pour ce serveur.
Qu'est-ce que ça veut dire? Comment puis-je réparer ça?
J'utilise un site Web Drupal 8 et, lorsque je navigue sur une page, une page blanche s'affiche avec le message d'erreur suivant.
Le nom d'hôte fourni n'est pas valide pour ce serveur.
Qu'est-ce que ça veut dire? Comment puis-je réparer ça?
Réponses:
Ce message d'erreur provient d'une fonctionnalité ajoutée à Drupal 8 pour se protéger contre les attaques d'en-tête HTTP Host . La fonctionnalité est également décrite dans l' enregistrement de modification généré pour le correctif.
Essentiellement, il était possible d'usurper l' en-tête de l'hôte HTTP à des fins néfastes et d'inciter Drupal à utiliser un nom de domaine différent dans plusieurs sous-systèmes (notamment la génération de liens). En d'autres termes, l'en-tête HTTP Host doit être considéré comme une entrée utilisateur et non fiable.
Pour lutter contre cela, un nouveau paramètre, a $settings['trusted_host_patterns']
été ajouté à Drupal 8 pour configurer une liste de noms d'hôtes "de confiance" à partir desquels le site peut être exécuté. Le paramètre doit être un tableau de modèles d'expression régulière, sans délimiteurs, représentant les noms d'hôtes à partir desquels vous souhaitez autoriser l'exécution.
Par exemple, si vous exécutez votre site à partir d'un seul nom d'hôte "www.exemple.com", vous devez l'ajouter à vos paramètres (généralement situés à l'adresse suivante ./sites/default/settings.php
):
$settings['trusted_host_patterns'] = array(
'^www\.example\.com$',
);
Notez le ^
, \.
et $
. Ce sont la syntaxe PCRE . Cela signifie simplement que vous voulez faire correspondre "www.example.com" avec précision, sans rien d'extra au début et à la fin, et que les points doivent être traités comme des points et non des caractères génériques.
Si vous utilisez "exemple.com", utilisez simplement:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
);
Si vous devez exécuter un site comportant plusieurs domaines et / ou sous-domaines et ne procédez pas à la redirection canonique des URL, votre paramètre ressemblerait à ceci:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
'^.+\.example\.com$',
'^example\.org',
'^.+\.example\.org',
);
Cela permet au site de fonctionner avec toutes les variantes de example.com et example.org, avec tous les sous-domaines inclus.
Une fois que vous vous êtes ajusté $settings['trusted_host_patterns']
à la valeur appropriée, vous devriez pouvoir accéder à nouveau à votre site.
Vous pouvez également vérifier l’état de vos paramètres d’hôte approuvé à partir de la page de rapport d’état, à l’adresse admin / reports / status
Si vous supprimez complètement le paramètre, le mécanisme de l'hôte approuvé ne sera pas utilisé et une erreur apparaîtra sur la page du rapport d'état. De plus, votre site peut également être vulnérable aux attaques par en-tête HTTP Host.
Si ce paramètre est configuré et que vous voyez ce message, cela signifie probablement que vous avez altéré la syntaxe des expressions régulières. Dans ce cas, prenons le premier exemple, copiez / collez dans vos paramètres, puis modifiez-le pour refléter le nom d'hôte à partir duquel votre site est exécuté.
pour l'installation de localhost, vous pouvez utiliser le code suivant dans votre fichier settings.php
$settings['trusted_host_patterns'] = array(
'^localhost$','^YOUR_IP_ADDRESS$'
);
Cela se produit car trusted_host_patterns
variable dans votre fichier de paramètres. Si vous travaillez sur l'environnement local et que vous souhaitez le remplacer, définissez la section suivante dans votre settings.local.php
fichier:
/*
* Drupal Trusted Host Patterns
*/
$settings['trusted_host_patterns'] = [];
$settings['trusted_host_patterns'] = [ '.*' ];
Ou plus spécifique pour les environnements locaux :
$settings['trusted_host_patterns'] = array(
'^172\.20.\0.\3$',
'^localhost$',
);
C'est la solution la plus simple, mais non recommandée car vous devez définir les valeurs appropriées pour éviter d'usurper l'en-tête HTTP Host à des fins néfastes. Si votre site Web ne fonctionne que sur votre section locale, alors ça devrait aller.
Voir: Nouveau paramètre pour la configuration du nom d'hôte approuvé .
Ce problème se produira également si vous avez
<VirtualHost *:443>
quand vous devriez avoir
<VirtualHost *:80>
configurer dans une configuration non ssl (comme pour les environnements de développement et de test) et essayer d'accéder au site sur le port 80
Ceci est dû à la configuration de l'hôte de confiance du serveur. Il peut produire lorsque vous modifiez le nom de domaine ou 'trusted_host_patterns'
. Pour résoudre le Probleme, ajoutez votre nouveau domaine à la DRUPAL_ROOT/sites/SITE_FOLDER/settings.php
(Ex: sites/defaults/settings.php
)
Exemple: Nom de domaine = newdomain.com
$settings['trusted_host_patterns'] = array(
'^newdomain.com\.loc$',
'^www\.newdomain.com\.loc$',
);