apache / 2.4 / reference / handler.html

Apache 的处理程序使用

本文档描述了 Apache 处理程序的使用。

什么是处理程序

“处理程序”是调用文件时要执行的动作的内部 Apache 表示形式。通常,文件具有基于文件类型的隐式处理程序。通常,所有文件仅由服务器提供服务,但是某些文件类型将单独“处理”。

还可以基于文件 extensions 或位置来显式配置处理程序,而与文件类型无关。这是有利的,这既因为它是一种更优雅的解决方案,又因为它还允许将类型和处理程序与文件关联。 (另请参见具有多个 extensions 的文件。)

处理程序可以内置在服务器中或包含在模块中,也可以使用Action指令添加。标准分发中的内置处理程序如下:

  • default-handler :使用default_handler()发送文件,default_handler()是默认用于处理静态内容的处理程序。 (核心)

  • send-as-is :按原样发送带有 HTTP Headers 的文件。 (mod_asis)

  • cgi-script :将文件视为 CGI 脚本。 (mod_cgi)

  • imap-file :解析为图像 Map 规则文件。 (mod_imagemap)

  • server-info :获取服务器的配置信息。 (mod_info)

  • server-status :获取服务器的状态报告。 (mod_status)

  • type-map :解析为用于内容协商的类型 Map 文件。 (mod_negotiation)

Examples

使用 CGI 脚本修改静态内容

以下指令将导致对具有htmlextensions 的文件的请求触发footer.pl CGI 脚本的启动。

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

然后,CGI 脚本负责发送最初请求的文档(由PATH_TRANSLATED环境变量指向)并进行所需的修改或添加。

具有 HTTP Headers 的文件

以下指令将启用send-as-is处理程序,该处理程序用于包含其自己的 HTTP Headers 的文件。 /web/htdocs/asis/目录中的所有文件都将由send-as-is处理程序处理,无论其文件 extensions 如何。

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

Programmer's Note

为了实现处理程序功能,您可能希望使用Apache API。具体来说,新记录已添加到request_rec结构中:

char *handler

如果希望让模块使用处理程序,则只需在请求invoke_handler阶段之前的任何时间将r->handler设置为处理程序的名称。处理程序的实现与以前一样,尽管使用处理程序名称而不是 Content Type。虽然没有必要,但是处理程序的命名约定是使用短划线分隔的单词(不带斜杠),以免侵害媒体类型名称空间。