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 определяет переменные окружения на основе выражения. Эти выражения вычисляются во время выполнения, а затем к переменной окружения применяется результат таким же образом, как в SetEnvIf, включая обратные ссылки.

    SetEnvIfExpr "tolower(req('X-Sendfile')) == 'd:\images\very_big.iso')" iso_delivered
    SetEnvIfExpr "tolower(req('X-Sendfile')) =~ /(.*\.iso$)/" iso-path=$1

Это будет устанавливать переменную окружения 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