Apache. Документация на русском


Разделы:   1    2    3    4    5    6    7    8    9      10      11    12    13    14    15    16  

Раздел 10. Модули Апача

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192      193      194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

 <         > 
  RU            EN  

Пункт 193. Модуль Apache mod_setenvif

Модуль 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
Переопределить:Информация о файле
Положение дел:База
Модуль:mod_setenvif

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

 Робот BrowserMatch is_a_robot
Робот SetEnvIf User-Agent is_a_robot 

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

 BrowserMatch ^Mozilla формирует jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" таблицы agifframes javascript
BrowserMatch MSIE !javascript 


Директива BrowserMatchNoCase

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

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

 BrowserMatchNoCase платформа Mac = Macintosh
BrowserMatchNoCase win платформа = windows 

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

 BrowserMatchNoCase Робот is_a_robot
SetEnvIfNoCase User-Agent Робот is_a_robot 


Директива SetEnvIf

Описание:Устанавливает переменные среды на основе атрибутов запроса
Синтаксис: SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
Контекст:конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределить:Информация о файле
Положение дел:База
Модуль: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] директивами, доступны для тестирования таким образом. «Ранее» означает, что они были определены в более широкой области (например, на уровне сервера) или ранее в области действия текущей директивы. Переменные среды будут учитываться только в том случае, если не было совпадений среди характеристик запроса и для атрибута не использовалось регулярное выражение .

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

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

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

В первой форме значение будет установлено на «1». Второй удалит данную переменную, если она уже определена, а третий установит для переменной буквальное значение, заданное . Начиная с версии 2.0.51, Apache httpd распознает вхождения .. внутри значения и заменяет их заключенными в скобки подвыражениями регулярного выражения . обеспечивает доступ ко всей строке, соответствующей этому шаблону. value $1 $9 $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 "\.(.*)$" РАСШИРЕНИЕ=$1
SetEnvIf ^TS ^[az] HAVE_TS 

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

В последнем примере будет установлена переменная среды, HAVE_TS если запрос содержит какие-либо заголовки, начинающиеся с «TS», значения которых начинаются с любого символа в наборе [az].

Смотрите также

  • Переменные среды в HTTP-сервере Apache для дополнительных примеров.


Директива SetEnvIfExpr

Описание:Задает переменные среды на основе выражения ap_expr
Синтаксис: SetEnvIfExpr expr [!]env-variable[=value] [[!]env-variable[=value]] ...
Контекст:конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределить:Информация о файле
Положение дел:База
Модуль: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 

Смотрите также

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


Директива SetEnvIfNoCase

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

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

 Пример узла SetEnvIfNoCase\.Org site=example 

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



 <         > 

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192      193      194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

Рейтинг@Mail.ru