Apache のハンドラの使用 - Apache HTTP サーバ バージョン 2.4 (original) (raw)
この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。
Apache のハンドラの使用に関して記述しています。
参照
ハンドラとは
「ハンドラ」とは、ファイルが呼ばれたときに実行される動作の Apache における内部表現です。 通常、ファイルはファイルタイプ(訳注: MIME-type)に基づいた暗黙のハンドラがあります。 普通はすべてのファイルは単にサーバに扱われますが、 ファイルタイプの中には別に「ハンドル」(訳注: 扱う) されるものもあります。
ファイルの拡張子や置いている場所に基づいてファイルタイプと関係なく、 ハンドラを明示的に設定することもできます。 これはより優雅な解決法という点と、ファイルにタイプとハンドラの両方を関連付けることができるという点で優れています。 (複数の拡張子のあるファイルも参照してください)。
ハンドラはサーバに組み込んだり、モジュールとして含めたり、[Action](./mod/mod%5Factions.html#action)
ディレクティブとして追加したりすることができます。 以下は標準配布に組み込まれているハンドラです。
- default-handler:
default_handelr()
を使ってファイルを送ります。 静的なコンテンツを扱うときにデフォルトで使用されるハンドラです。 ([core](./mod/core.html)
) - send-as-is: HTTP ヘッダのあるファイルをそのまま送ります。 (
[mod_asis](./mod/mod%5Fasis.html)
) - cgi-script: ファイルを CGI スクリプトとして扱います。 (
[mod_cgi](./mod/mod%5Fcgi.html)
) - imap-file: イメージマップのルールファイルとして解析します。 (
[mod_imagemap](./mod/mod%5Fimagemap.html)
) - server-info: サーバの設定情報を取得します。 (
[mod_info](./mod/mod%5Finfo.html)
) - server-status: サーバの状態報告を取得します。 (
[mod_status](./mod/mod%5Fstatus.html)
) - type-map: コンテントネゴシエーションのためのタイプマップとして解析します。 (
[mod_negotiation](./mod/mod%5Fnegotiation.html)
)
例
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
プログラマ向けのメモ
ハンドラの機能を実装するために、利用すると便利かもしれないものがApache API に追加されました。詳しく言うと、request_rec
構造体に新しいレコードが追加されたということです。
char *handler
もしモジュールがハンドラに関わりたい場合、 やらなければならないことは、リクエストが invoke_handler
ステージに達する以前に r->handler
を設定することだけです。ハンドラはコンテントタイプの代わりに ハンドラ名を使うようになっていること以外は、以前と同じように実装されています。 必ず要求されているわけではありませんが、メディアタイプ の名前空間を侵さないように、ハンドラの名前にはスラッシュを含まない、 ダッシュ(訳注: "-")で分離された名前を付ける習慣になっています。
コメント
Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.