Prowadzę witrynę Drupal 8, a kiedy przeglądam dowolną stronę, otrzymuję zwykłą białą stronę z następującym komunikatem o błędzie.
Podana nazwa hosta jest nieprawidłowa dla tego serwera.
Co to znaczy? Jak to naprawić?
Prowadzę witrynę Drupal 8, a kiedy przeglądam dowolną stronę, otrzymuję zwykłą białą stronę z następującym komunikatem o błędzie.
Podana nazwa hosta jest nieprawidłowa dla tego serwera.
Co to znaczy? Jak to naprawić?
Odpowiedzi:
Ten komunikat o błędzie pochodzi z funkcji, która została dodana do Drupala 8 w celu ochrony przed atakami nagłówka hosta HTTP . Ta funkcja jest również opisana w rekordzie zmian wygenerowanym dla łatki.
Zasadniczo można było sfałszować nagłówek hosta HTTP w niecnych celach i oszukać Drupala, aby używał innej nazwy domeny w kilku podsystemach (szczególnie w generowaniu linków). Innymi słowy, nagłówek hosta HTTP należy traktować jako dane wejściowe użytkownika i nie można mu ufać.
Aby temu zaradzić, $settings['trusted_host_patterns']
do Drupala 8 dodano nowe ustawienie, aby skonfigurować listę „zaufanych” nazw hostów, z których witryna może działać. Ustawienie musi być tablicą wzorców wyrażeń regularnych, bez ograniczników, reprezentujących nazwy hostów, z których chcesz zezwolić na uruchamianie.
Na przykład, jeśli prowadzisz witrynę z pojedynczą nazwą hosta „www.example.com”, powinieneś dodać ją do swoich ustawień (zwykle dostępnych pod adresem ./sites/default/settings.php
):
$settings['trusted_host_patterns'] = array(
'^www\.example\.com$',
);
Zauważ, że ^
, \.
i $
. Są to składnia PCRE . Oznacza to po prostu, że chcesz dokładnie dopasować „www.example.com”, bez żadnych dodatkowych elementów na początku i na końcu, i że kropki należy traktować jak kropki, a nie znaki wieloznaczne.
Jeśli korzystasz z „example.com”, po prostu użyj:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
);
Jeśli potrzebujesz uruchomić witrynę z wieloma domenami i / lub subdomenami i nie dokonujesz kanonicznego przekierowania adresu URL, Twoje ustawienie wyglądałoby mniej więcej tak:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
'^.+\.example\.com$',
'^example\.org',
'^.+\.example\.org',
);
Pozwala to na uruchomienie witryny ze wszystkich wariantów example.com i example.org, z uwzględnieniem wszystkich subdomen.
Po ustawieniu $settings['trusted_host_patterns']
właściwej wartości powinieneś ponownie móc przejść do swojej witryny.
Możesz także sprawdzić stan ustawień swojego zaufanego hosta na stronie raportu o stanie, która znajduje się na stronie admin / raporty / status
Jeśli usuniesz to ustawienie całkowicie, mechanizm zaufanego hosta nie będzie używany, a na stronie raportu o stanie pojawi się błąd. Ponadto witryna może być narażona na ataki na nagłówki hosta HTTP.
Jeśli masz skonfigurowane to ustawienie i widzisz ten komunikat, oznacza to prawdopodobnie, że zmieniłeś składnię wyrażeń regularnych. W takim przypadku weź pierwszy przykład i skopiuj / wklej do swoich ustawień, a następnie edytuj go, aby odzwierciedlał nazwę hosta, z którego działa witryna.
do instalacji localhost możesz użyć następującego kodu w pliku settings.php
$settings['trusted_host_patterns'] = array(
'^localhost$','^YOUR_IP_ADDRESS$'
);
Dzieje się tak, ponieważ trusted_host_patterns
zmienna w pliku ustawień. Jeśli pracujesz w środowisku lokalnym i chcesz to zastąpić, zdefiniuj następującą sekcję w swoim settings.local.php
pliku:
/*
* Drupal Trusted Host Patterns
*/
$settings['trusted_host_patterns'] = [];
Lub bardziej ogólny wzór :
$settings['trusted_host_patterns'] = [ '.*' ];
Lub bardziej specyficzne dla lokalnych środowisk :
$settings['trusted_host_patterns'] = array(
'^172\.20.\0.\3$',
'^localhost$',
);
Jest to najprostsze rozwiązanie, ale nie jest zalecane, ponieważ należy ustawić odpowiednie wartości, aby uniknąć fałszowania nagłówka hosta HTTP w niecnych celach. Jeśli twoja strona działa tylko w twoim lokalnym, to powinieneś być w porządku.
Ten problem występuje również, jeśli masz
<VirtualHost *:443>
kiedy powinieneś
<VirtualHost *:80>
skonfigurowane w konfiguracji innej niż ssl (jak w środowiskach deweloperskich / testowych) i spróbuj uzyskać dostęp do witryny na porcie 80
Wynika to z konfiguracji zaufanego hosta serwera. Może produkować po zmianie nazwy domeny lub 'trusted_host_patterns'
. Aby rozwiązać ten probleme, dodać nową domenę do DRUPAL_ROOT/sites/SITE_FOLDER/settings.php
(np sites/defaults/settings.php
)
Przykład: nazwa domeny = newdomain.com
$settings['trusted_host_patterns'] = array(
'^newdomain.com\.loc$',
'^www\.newdomain.com\.loc$',
);