Apache のハンドラの使用


ハンドラとは

関連モジュール

mod_actions
mod_asis
mod_cgi
mod_imap
mod_info
mod_include
mod_mime
mod_negotiation
mod_status
関連ディレクティブ

Action
AddHandler
RemoveHandler
SetHandler

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

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

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


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を設定することだけです。 ハンドラはコンテントタイプの代わりにハンドラ名を使うようになっていること以外は、 以前と同じように実装されています。必ず要求されているわけではありませんが、 メディアタイプの名前空間を侵さないように、ハンドラの名前にはスラッシュ を含まない、ダッシュ (訳注: "-") で分離された名前を付ける習慣になっています。