Відповіді:
$host
є змінною модуля Core .
$ хост
Ця змінна дорівнює рядку Host у заголовку запиту або імені сервера, що обробляє запит, якщо заголовок хоста недоступний.
Ця змінна може мати інше значення, ніж $ http_host у таких випадках: 1) коли заголовок вводу хоста відсутній або має порожнє значення, $ хост дорівнює значенню директиви_імен_сервера; 2) коли значення 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 example.com one.example.com two.example.com;
, $server_name
завжди буде "example.com", незалежно від того, який хост вказав користувач . Насправді, якщо у вас немає default_server
, хост може бути чимось зовсім іншим (наприклад, example.org).
server_name
що визначено в поточному блоці сервера. якщо у вас кількаserver_name
s, з’явиться лише перший.