Apache module mod_setenvif

### Apache HTTP Server Version 1.3

# mod_setenvif モジュール

このモジュールは、リクエストの属性に基づいて環境変数を設定する機能を 提供します。

ステータス: Base
ソースファイル: mod_setenvif.c
モジュール識別子: setenvif_module
互換性: Apache 1.3 以降で使用可能。

## 概要

`mod_setenvif` モジュールは、リクエストのある側面が 指定された正規表現に合うか どうかによって環境変数を設定する機能を提供します。 これらの環境変数を使用して、サーバの他の部分がどのような動作をするかを決定する ことができます。

このモジュールが提供するディレクティブは、設定ファイルに現れる順番に適用されます。 それを使って、次の例のようにより複雑な設定をすることができます。これは、 ブラウザが mozilla ではあるけれど、MSIE ではないときに `netscape` を 設定します。

>       BrowserMatch ^Mozilla netscape
>       BrowserMatch MSIE !netscape

詳細は、Apache の環境変数を 参照してください。

## ディレクティブ

- BrowserMatch
- BrowserMatchNoCase
- SetEnvIf
- SetEnvIfNoCase

## BrowserMatch ディレクティブ

構文: BrowserMatch regex envar[=value] [envar[=value]] ...
デフォルト: None
コンテキスト: サーバ設定ファイル、バーチャルホスト、 ディレクトリ、.htaccess
上書き: FileInfo
ステータス: Base
モジュール: mod_setenvif
互換性: Apache 1.2 以上 (このディレクティブは Apache 1.2 では、今では obsolete になっている mod_browser モジュールに ありました)。.htaccess ファイルでの使用は 1.3.13 以降でのみサポート。

BrowserMatch ディレクティブは、HTTP リクエストの `User-Agent` ヘッダフィールドに基づいて環境変数を設定します。最初の引数は POSIX.2 拡張正規表現 (`egrep` 形式の正規表現と似たもの) です。 残りの引数は、設定をする変数名とその値で、後者は省略可能です。 これらは以下の形式になります。

1. `varname`
2. `!varname`
3. `varname=value`

最初の形式では、値は "1" に設定されます。2 番目は変数が 既に定義されていた場合、それを削除します。3 番目は変数の値を `value` に設定します。`User-Agent` フィールドの文字列が複数のエントリにマッチした場合は、その結果が まとめられます。エントリは現れた順に処理され、後のエントリが前のものを 上書きします。

例:

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

正規表現の文字列は大文字小文字を区別することに 注意してください。大文字小文字を区別しないマッチは `BrowserMatchNoCase` ディレクティブを参照してください。

`BrowserMatch` ディレクティブと `BrowserMatchNoCase` ディレクティブは `SetEnvIf` ディレクティブと `SetEnvIfNoCase` ディレクティブの特別なケースです。以下の 2 行は同じ効果になります:

       BrowserMatchNoCase Robot is_a_robot
       SetEnvIfNoCase User-Agent Robot is_a_robot

## BrowserMatchNoCase ディレクティブ

構文: BrowserMatchNoCase regex envar[=value] [envar[=value]] ...
デフォルト: none
コンテキスト: サーバ設定ファイル、バーチャルホスト、 ディレクトリ、.htaccess
上書き: FileInfo
ステータス: Base
モジュール: mod_setenvif
互換性: Apache 1.2 以上 (このディレクティブは Apache 1.2 では、今では obsolete になっている mod_browser モジュールに ありました)。.htaccess ファイルでの使用は 1.3.13 以降でのみサポート。

`BrowserMatchNoCase` ディレクティブは、意味的には `BrowserMatch` ディレクティブとほとんど同じです。違う点は、大文字小文字を区別しないで マッチを行なうことです。例:

        BrowserMatchNoCase mac platform=macintosh
        BrowserMatchNoCase win platform=windows

`BrowserMatch` ディレクティブと `BrowserMatchNoCase` ディレクティブは `SetEnvIf` ディレクティブと `SetEnvIfNoCase` ディレクティブの特別なケースです。以下の 2 行は同じ効果になります:

       BrowserMatchNoCase Robot is_a_robot
       SetEnvIfNoCase User-Agent Robot is_a_robot

## SetEnvIf ディレクティブ

構文: SetEnvIf attribute regex envar[=value] [envar[=value]] ...
デフォルト: none
コンテキスト: サーバ設定ファイル、バーチャルホスト、 ディレクトリ、.htaccess
上書き: FileInfo
ステータス: Base
モジュール: mod_setenvif
互換性: Apache 1.3 以上。Request_Protocol キーワードと 環境変数のマッチは 1.3.7 以降でのみ使用可能。.htaccess ファイルでの使用は 1.3.13 以降でのみサポート。

`SetEnvIf` ディレクティブは、リクエストの属性に基づいて 環境変数を定義します。これらの属性は、HTTP リクエストのいろいろなヘッダ フィールド (詳しい情報は RFC 2616 を参照 してください) か、以下のような、リクエストの他の側面であることができます。

- `Remote_Host` - リクエストを行なっているクライアントの ホスト名 (もしあれば)
- `Remote_Addr` - リクエストを行なっているクライアントの IP アドレス
- `Remote_User` - 認証されたユーザ名 (もしあれば)
- `Request_Method` - 使用されているメソッド名 (`GET`, `POST` など)
- `Request_Protocol` - リクエストが行なわれたプロトコルの 名前とバージョン (例えば、"HTTP/0.9", "HTTP/1.1" など。)
- `Request_URI` - URL のスキームとホストの後の部分

よく使われるリクエストのヘッダフィールドには `Host`, `User-Agent`, `Referer` があります。

属性名 attribute が特別なキーワードやリクエストのヘッダフィールド名に マッチしないときは、リクエストに関連付けられたリストにある環境変数の 名前として試されます。これにより、`SetEnvIf` ディレクティブが 前のマッチの結果を使用することができるようになります。

> 前の `SetEnvIf[NoCase]` で定義された環境変数のみを この方法で調べることができます。「前」というのは (サーバ全体、のような) より広いスコープで定義されたか、現ディレクティブのスコープの中の前の方で 定義されたという意味です。

例:

       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\.com intra_site_referral
            :
       SetEnvIf object_is_image xbm XBIT_PROCESSING=1

先頭の三つはリクエストが画像ファイルのときに、環境変数 `object_is_image` を設定します。4 番目は参照元のページが `www.mydomain.com` ウェブサイトのどこかにある場合に `intra_site_referral` を設定します。

## SetEnvIfNoCase ディレクティブ

構文: SetEnvIfNoCase attribute regex envar[=value] [envar[=value]] ...
デフォルト: none
コンテキスト: サーバ設定ファイル、バーチャルホスト、 ディレクトリ、.htaccess
上書き: FileInfo
ステータス: Base
モジュール: mod_setenvif
互換性: Apache 1.3 以上。Request_Protocol キーワードと 環境変数のマッチは 1.3.7 以降でのみ使用可能。.htaccess ファイルでの使用は 1.3.13 以降でのみサポート。

`SetEnvIfNoCase` は、意味的には `SetEnvIf` とほとんど同じです。違いは正規表現のマッチが大文字小文字を区別しないで 行なわれることです。例えば:

       SetEnvIfNoCase Host Apache\.Org site=apache

これは、HTTP リクエストの `Host:` ヘッダフィールドがあり、 その値が `Apache.org`, `apache.org` やその他の 大文字小文字の組み合わせであったときに、環境変数 `site` を "`apache`" に設定します。

### Apache HTTP Server Version 1.3