Apache HTTP サーバ バージョン 2.4

Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.4

# Apache のハンドラの使用

この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。

Apache のハンドラの使用に関して記述しています。

## ハンドラとは

関連モジュール | 関連ディレクティブ
--- | ---
`mod_actions` `mod_asis` `mod_cgi` `mod_imagemap` `mod_info` `mod_mime` `mod_negotiation` `mod_status` | `Action` `AddHandler` `RemoveHandler` `SetHandler`

「ハンドラ」とは、ファイルが呼ばれたときに実行される動作の Apache における内部表現です。 通常、ファイルはファイルタイプ(訳注: MIME-type)に基づいた暗黙のハンドラがあります。 普通はすべてのファイルは単にサーバに扱われますが、 ファイルタイプの中には別に「ハンドル」(訳注: 扱う) されるものもあります。

ファイルの拡張子や置いている場所に基づいてファイルタイプと関係なく、 ハンドラを明示的に設定することもできます。 これはより優雅な解決法という点と、ファイルにタイプとハンドラの両方を関連付けることができるという点で優れています。 (複数の拡張子のあるファイルも参照してください)。

ハンドラはサーバに組み込んだり、モジュールとして含めたり、 `Action` ディレクティブとして追加したりすることができます。 以下は標準配布に組み込まれているハンドラです。

- default-handler:`default_handelr()` を使ってファイルを送ります。 静的なコンテンツを扱うときにデフォルトで使用されるハンドラです。 (`core`)
- send-as-is: HTTP ヘッダのあるファイルをそのまま送ります。 (`mod_asis`)
- cgi-script: ファイルを CGI スクリプトとして扱います。 (`mod_cgi`)
- imap-file: イメージマップのルールファイルとして解析します。 (`mod_imagemap`)
- server-info: サーバの設定情報を取得します。 (`mod_info`)
- server-status: サーバの状態報告を取得します。 (`mod_status`)
- type-map: コンテントネゴシエーションのためのタイプマップとして解析します。 (`mod_negotiation`)

## 例

### CGI スクリプトを用いて静的なコンテンツを変更する

以下のディレクティブによって、拡張子が `html` であるファイルは `footer.pl` CGI スクリプトを起動するようになります。

    Action add-footer /cgi-bin/footer.pl
    AddHandler add-footer .html

CGI スクリプトは希望の修正や追加を行なって、元々要求された文書 (環境変数 `PATH_TRANSLATED` で指されています) を送る責任があります。

### HTTP ヘッダのあるファイル

以下のディレクティブは `send-as-is` ハンドラを使用するように指示します。このハンドラは自分自身の HTTP ヘッダを持っているファイルに使用されます。ここでは、拡張子に関わらず、 `/web/htdocs/asis` ディレクトリにある全てのファイルは `send-as-is` ハンドラによって扱われます。

    <Directory /web/htdocs/asis>
        SetHandler send-as-is
    </Directory>

## プログラマ向けのメモ

ハンドラの機能を実装するために、利用すると便利かもしれないものが Apache API に追加されました。詳しく言うと、`request_rec` 構造体に新しいレコードが追加されたということです。

    char *handler

もしモジュールがハンドラに関わりたい場合、 やらなければならないことは、リクエストが `invoke_handler` ステージに達する以前に `r->handler` を設定することだけです。ハンドラはコンテントタイプの代わりに ハンドラ名を使うようになっていること以外は、以前と同じように実装されています。 必ず要求されているわけではありませんが、メディアタイプ の名前空間を侵さないように、ハンドラの名前にはスラッシュを含まない、 ダッシュ(訳注: "-")で分離された名前を付ける習慣になっています。