Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_setenvif

Описание: Позволяет устанавливать переменные окружения на основе характеристик запроса
Статус: Базовый
Идентификатор модуля: setenvif_module
Файл исходного кода: mod_setenvif.c

Краткое описание

Модуль mod_setenvif позволяет устанавливать внутренние переменные окружения в зависимости от того, совпадают ли различные аспекты запроса со специфицированными вами регулярными выражениями. Эти переменные окружения могут использоваться другими частями сервера для принятия решений об действиях, а также станут доступными для CGI-скриптов и SSI-страниц.

Директивы обрабатываются в порядке их появления в конфигурационных файлах. Таким образом, можно использовать более сложные последовательности, например, в данном примере, который устанавливает netscape если браузер — mozilla, но не MSIE.

BrowserMatch ^Mozilla netscape
BrowserMatch MSIE !netscape

Когда сервер ищет путь через внутренний подзапрос, такой как поиск DirectoryIndex или генерация списка каталога с помощью mod_autoindex, переменные окружения, связанные с запросом, не наследуются в подзапросе. Кроме того, директивы SetEnvIf не обрабатываются отдельно в подзапросе из-за фаз API, в которых mod_setenvif выполняет действия.

Директива BrowserMatch

Описание: Устанавливает переменные окружения в зависимости от HTTP User-Agent
Синтаксис:
BrowserMatch regex [!]env-variable[=value] [[!]env-variable[=value]] ...
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: FileInfo
Статус: Базовый
Модуль: mod_setenvif

Директива BrowserMatch является частным случаем директивы SetEnvIf, которая устанавливает переменные окружения в зависимости от заголовка HTTP запроса User-Agent. Следующие две строки имеют одинаковый эффект:

BrowserMatch Robot is_a_robot
SetEnvIf User-Agent Robot is_a_robot

Некоторые дополнительные примеры:

BrowserMatch ^Mozilla forms jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript
BrowserMatch MSIE !javascript

Директива BrowserMatchNoCase

Описание: Устанавливает переменные окружения в зависимости от User-Agent без учёта регистра
Синтаксис:
BrowserMatchNoCase regex [!]env-variable[=value] [[!]env-variable[=value]] ...
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: FileInfo
Статус: Базовый
Модуль: mod_setenvif

Директива BrowserMatchNoCase семантически идентична директиве BrowserMatch. Однако она обеспечивает сопоставление без учёта регистра. Например:

BrowserMatchNoCase mac platform=macintosh
BrowserMatchNoCase win platform=windows

Директивы BrowserMatch и BrowserMatchNoCase являются частными случаями директив SetEnvIf и SetEnvIfNoCase. Следующие две строки имеют одинаковый эффект:

BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot

Директива SetEnvIf

Описание: Устанавливает переменные окружения на основе атрибутов запроса
Синтаксис:
SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: FileInfo
Статус: Базовый
Модуль: mod_setenvif

Директива SetEnvIf определяет переменные окружения на основе атрибутов запроса. Атрибут, указанный в первом аргументе, может быть четырьмя вещами:

  1. Поле заголовка HTTP запроса (см. RFC2616 для получения дополнительной информации); например: Host, User-Agent, Referer, и Accept-Language. Можно использовать регулярное выражение для указания набора заголовков запроса.
  2. Один из следующих аспектов запроса:
    • Remote_Host - имя хоста (если доступно) клиента, отправляющего запрос
    • Remote_Addr - IP-адрес клиента, отправляющего запрос
    • Server_Addr - IP-адрес сервера, на котором был получен запрос (только с версиями, более поздними, чем 2.0.43)
    • Request_Method - имя используемого метода (GET, POST, и так далее)
    • Request_Protocol - имя и версия протокола, с помощью которого был отправлен запрос (например, "HTTP/0.9", "HTTP/1.1", и т.д.)
    • Request_URI - ресурс, запрошенный в строке HTTP запроса — обычно часть URL, следующая за схемой и именем хоста, без строки запроса. Обратитесь к директиве RewriteCond модуля mod_rewrite для получения дополнительной информации о том, как сопоставить строку запроса.
  3. Имя переменной окружения из списка переменных, связанных с запросом. Это позволяет директивам SetEnvIf проверять результаты предыдущих совпадений. Доступны только те переменные окружения, которые определены предыдущими директивами SetEnvIf[NoCase]. «Предыдущие» означает, что они были определены в более широком контексте (например, на уровне всего сервера) или ранее в текущем контексте директивы. Переменные окружения будут рассматриваться только в случае отсутствия совпадения среди характеристик запроса и не использования регулярного выражения для атрибута.

Второй аргумент (regex) — регулярное выражение. Если regex соответствует атрибуту, тогда оцениваются остальные аргументы.

Остальные аргументы указывают имена переменных для установки и, необязательно, значения, которые должны быть установлены. Они имеют вид

  1. varname, или
  2. !varname, или
  3. varname=value

В первом случае значение будет установлено в «1». Во втором случае заданная переменная будет удалена, если она уже определена, а в третьем случае переменная будет установлена в указанное значение value. С версии 2.0.51 Apache httpd распознаёт вхождения $1..$9 в value и заменяет их скобочными подвыражениями из regex. $0 обеспечивает доступ к всей строке, соответствующей этому шаблону.

SetEnvIf Request_URI "\.gif$" object_is_image=gif
SetEnvIf Request_URI "\.jpg$" object_is_image=jpg
SetEnvIf Request_URI "\.xbm$" object_is_image=xbm
    
SetEnvIf Referer www\.mydomain\.example\.com intra_site_referral
    
SetEnvIf object_is_image xbm XBIT_PROCESSING=1
    
SetEnvIf Request_URI "\.(.*)$" EXTENSION=$1

SetEnvIf ^TS  ^[a-z]  HAVE_TS

Первые три примера установят переменную окружения object_is_image если запрос был для файла изображения, а четвёртый установит intra_site_referral если страница, ссылающаяся на неё, находится где-то на сайте www.mydomain.example.com.

Последний пример установит переменную окружения HAVE_TS если запрос содержит любые заголовки, начинающиеся с "TS", значения которых начинаются с любого символа в наборе [a-z].

См. также

  • Переменные окружения в Apache HTTP Server, для дополнительных примеров.

Директива SetEnvIfExpr

Описание: Устанавливает переменные окружения на основе выражения ap_expr
Синтаксис:
SetEnvIfExpr expr [!]env-variable[=value] [[!]env-variable[=value]] ...
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: FileInfo
Статус: Базовый
Модуль: mod_setenvif

Директива SetEnvIfExpr определяет переменные окружения на основе выражения <If> ap_expr. Эти выражения будут вычисляться во время выполнения и применяться к переменной env-variable таким же образом, как директива SetEnvIf.

SetEnvIfExpr "tolower(req('X-Sendfile')) == 'd:\images\very_big.iso')" iso_delivered

Это установит переменную окружения iso_delivered каждый раз, когда наше приложение пытается её отправить через X-Sendfile.

Более полезный пример — установить переменную rfc1918, если удалённый IP-адрес — это частный адрес согласно RFC 1918:

SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918

См. также

  • Выражения в Apache HTTP Server, для полного справочника и дополнительных примеров.
  • <If> может использоваться для достижения аналогичных результатов.
  • mod_filter

Директива SetEnvIfNoCase

Описание: Устанавливает переменные окружения на основе атрибутов запроса без учёта регистра
Синтаксис:
SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: FileInfo
Статус: Базовый
Модуль: mod_setenvif

Директива SetEnvIfNoCase семантически идентична директиве SetEnvIf, и отличается только тем, что сопоставление с регулярным выражением выполняется без учёта регистра. Например:

SetEnvIfNoCase Host Example\.Org site=example

Это приведет к тому, что переменная окружения site будет установлена в "example", если поле заголовка HTTP запроса Host: было включено и содержало Example.Org, example.org, или любую другую комбинацию.

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_setenvif.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API