Модуль 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 определяет переменные окружения на основе атрибутов запроса. Атрибут, указанный в первом аргументе, может быть четырьмя вещами:
- Поле заголовка HTTP запроса (см. RFC2616 для получения дополнительной информации); например:
Host,User-Agent,Referer, иAccept-Language. Можно использовать регулярное выражение для указания набора заголовков запроса. - Один из следующих аспектов запроса:
-
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для получения дополнительной информации о том, как сопоставить строку запроса.
-
- Имя переменной окружения из списка переменных, связанных с запросом. Это позволяет директивам
SetEnvIfпроверять результаты предыдущих совпадений. Доступны только те переменные окружения, которые определены предыдущими директивамиSetEnvIf[NoCase]. «Предыдущие» означает, что они были определены в более широком контексте (например, на уровне всего сервера) или ранее в текущем контексте директивы. Переменные окружения будут рассматриваться только в случае отсутствия совпадения среди характеристик запроса и не использования регулярного выражения для атрибута.
Второй аргумент (regex) — регулярное выражение. Если regex соответствует атрибуту, тогда оцениваются остальные аргументы.
Остальные аргументы указывают имена переменных для установки и, необязательно, значения, которые должны быть установлены. Они имеют вид
-
varname, или -
!varname, или 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