Tento článek popisuje příčinu následující chybové zprávy a postup, jak problém vyřešit:
The provided host name is not valid for this server.
Když pracujete s Drupalem 8, může se vám tato chybová zpráva zobrazit, když projdete jakoukoli stránku a uvidíte obyčejnou bílou stránku.
Upozornění: Než použijete tyto pokyny pro odstraňování problémů, ujistěte se, že rozumíte svému prostředí, protože tyto kroky pro odstraňování problémů nemusí být vhodné pro všechna nastavení nebo konfigurace. Před provedením jakýchkoli změn ve vašem systému také doporučujeme provést zálohu, abyste měli možnost změny v případě potřeby vrátit.
Zdroj chyby
Tato chybová zpráva pochází z funkce, která byla přidána do Drupalu za účelem ochrany proti útokům hlavičky hostitele HTTP. Záznam změny vygenerovaný pro opravu popisuje funkci.
Bohužel je možné zfalšovat hlavičku hostitele HTTP pro nekalé účely a přimět Drupal k použití jiného názvu domény v několika podsystémech (zejména generování odkazů). Proto byste měli považovat hlavičku hostitele HTTP za uživatelský vstup, který není důvěryhodný.
Opravit tuto chybu
Aby se tento problém vyřešil, přidal Drupal následující nastavení pro konfiguraci seznamu důvěryhodných názvů hostitelů, ze kterých lze web spustit.
$settings['trusted_host_patterns']
Toto nastavení je pole vzorů regulárních výrazů bez oddělovačů, které představují názvy hostitelů, jejichž spouštění chcete povolit.
Pokud například provozujete svůj web z jediného názvu hostitele www.example.com
, pak byste to měli přidat do svého nastavení (obvykle se nachází na ./sites/default/settings.php
):
$settings['trusted_host_patterns'] = array( '^www\.example\.com$', );
Poznámka :^, \. a $ jsou syntaxe Perl Compatible Regular Expressions (PCRE) a znamenají, že chcete najít shodu s www.example.com
přesně, na začátku ani na konci není nic navíc a že s tečkami by se mělo zacházet jako s tečkami a ne za zástupné znaky.
Pokud spouštíte z „example.com“, použijte následující:
$settings['trusted_host_patterns'] = array( '^example\.com$', );
Pokud potřebujete provozovat web s více doménami nebo subdoménami a neprovádíte kanonické přesměrování URL, vaše nastavení by mělo být podobné následujícímu příkladu:
$settings['trusted_host_patterns'] = array( '^example\.com$', '^.+\.example\.com$', '^example\.org', '^.+\.example\.org', );
To umožňuje webu běžet ze všech variant example.com a example.org včetně všech subdomén.
Pokud máte toto nastavení nakonfigurované a stále se vám zobrazuje chybová zpráva, pravděpodobně nepoužíváte správnou syntaxi regulárního výrazu. V tomto případě si vezměte první příklad v tomto článku, zkopírujte jej a vložte do nastavení a poté jej upravte tak, aby odrážel název hostitele, ze kterého váš web běží.
Po úpravě $settings['trusted_host_patterns']
na správnou hodnotu, měli byste být schopni znovu procházet svůj web.
Odebírání nastavení
Pokud toto nastavení úplně odeberete, mechanismus důvěryhodného hostitele se nepoužije a na stránce zprávy o stavu se zobrazí chyba. Kromě toho může být váš web zranitelný před útoky záhlaví HTTP hostitele.
Kontrola stavu
Stav nastavení důvěryhodného hostitele můžete zkontrolovat na stránce stavové zprávy, která je na adrese admin/reports/status
.