Odpowiedzi:
$host
jest zmienną modułu Core .
$ host
Ta zmienna jest równa wierszowi Host w nagłówku żądania lub nazwie serwera przetwarzającego żądanie, jeśli nagłówek Host nie jest dostępny.
Ta zmienna może mieć inną wartość niż $ http_host w takich przypadkach: 1) gdy nagłówek wejściowy Host jest nieobecny lub ma pustą wartość, $ host jest równe wartości dyrektywy server_name; 2) gdy wartość Host zawiera numer portu, $ host nie zawiera tego numeru portu. Wartość $ host jest zawsze pisana małymi literami od 0.8.17.
$http_host
jest również zmienną tego samego modułu, ale nie znajdziesz jej o tej nazwie, ponieważ jest zdefiniowana generalnie jako $http_HEADER
( ref ).
$ http_HEADER
Wartość nagłówka żądania HTTP HEADER po przekonwertowaniu na małe litery iz „myślnikami” zamienionymi na „podkreślenia”, np. $ Http_user_agent, $ http_referer ...;
Zreasumowanie:
$http_host
równa się zawsze HTTP_HOST
nagłówkowi żądania.$host
równa się $http_host
, małe litery i bez numeru portu (jeśli jest obecny), z wyjątkiem sytuacji, gdy HTTP_HOST
jest nieobecny lub jest wartością pustą . W takim przypadku $host
jest równa wartości server_name
dyrektywy serwera, który przetworzył żądanie.server_name
dyrektyw. jeśli zdarzy się, że masz wyrażenie regularne w pierwszym, to staje się ono $host
, a podczas przepisywania reguł mogą się zdarzyć różne brzydkie rzeczy.
$server_name
zmienna jest równa wartości server_name
dyrektywy lub rzeczywistej nazwie serwera, która została wybrana, jeśli było wiele server_name
dyrektyw?
$server_name
jest zawsze równa pierwszej wartości określonej w dyrektywie server_name. Na przykład w przypadku server_name example.com one.example.com two.example.com;
, $server_name
zawsze będzie to „example.com”, niezależnie od hosta określonego przez użytkownika . W rzeczywistości, jeśli nie masz default_server
, hostem może być coś zupełnie innego (na przykład example.org).
server_name
który jest zdefiniowany w bieżącym bloku serwera. jeśli masz wieleserver_name
s, pojawi się tylko pierwszy.