Ответы:
$host
переменная модуля Core
$ хост
Эта переменная равна строке Host в заголовке запроса или имени сервера, обрабатывающего запрос, если заголовок Host недоступен.
Эта переменная может иметь значение, отличное от $ http_host, в следующих случаях: 1) если входной заголовок Host отсутствует или имеет пустое значение, $ host равно значению директивы server_name; 2) когда значение Host содержит номер порта, $ host не включает этот номер порта. Значение $ host всегда строчное с 0.8.17.
$http_host
также является переменной того же модуля, но вы не найдете его с таким именем, поскольку оно определено как $http_HEADER
( ref ).
$ http_HEADER
Значение заголовка HTTP-запроса HEADER при преобразовании в нижний регистр и с «черточками», преобразованными в «подчеркивания», например, $ http_user_agent, $ http_referer ...;
Подводя итог:
$http_host
всегда равен HTTP_HOST
заголовку запроса$host
равно $http_host
, в нижнем регистре и без номера порта (если присутствует), за исключением случаев, когда HTTP_HOST
отсутствует или является пустым значением . В этом случае $host
равно значению server_name
директивы сервера, обработавшего запрос.server_name
директив. если у вас есть регулярное выражение в первом, оно становится $host
, и во время правил перезаписи могут происходить все виды уродливых вещей.
$server_name
переменная server_name
значению директивы или фактическому имени сервера, которое было выбрано, если было несколько server_name
директив?
$server_name
всегда равно первому значению, указанному в директиве server_name. Например, с server_name example.com one.example.com two.example.com;
, $server_name
всегда будет «example.com», независимо от того, какой хост указал пользователь . На самом деле, если у вас нет default_server
, хост может быть чем-то совершенно другим (например, example.org).
server_name
который определен в текущем блоке сервера. если у вас есть несколькоserver_name
s, появится только первый.