Apache处理器的使用

本文阐述Apache处理器的使用。

什么是处理器(Handler)

相关模块

  • mod_actions
  • mod_asis
  • mod_cgi
  • mod_imagemap
  • mod_info
  • mod_mime
  • mod_negotiation
  • mod_status

相关指令

  • Action
  • AddHandler
  • RemoveHandler
  • SetHandler

"处理器"是当一个文件被调用时,Apache所执行操作的内部表现。文件一般都有基于其文件类型的隐含处理器。通常,文件都只是被服务器简单的提交,只有某些文件类型会被特别地"处理"。

Apache1.1增加了使用处理器的能力。处理器可以基于文件名后缀或位置进行指定,而不只是文件类型,其优越性不仅在于它是一个优秀的方案,还在于它允许一个文件同时与一种类型一个处理器相关联。(参见:带多扩展名的文件)

处理器可以被编译进服务器也可以包含在模块中,还可以用Action指令增加。标准发行版中内建的处理器如下:

  • default-handler:使用default_handler()发送文件,这是处理静态内容的默认处理器。(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后缀的文件的请求,调用CGI脚本footer.pl

        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里面增加了一些内容,你可能会用到。尤其是Apache API结构中增加了一个字段:

      char *handler

如果你的模块需要使用处理器,只须在对请求执行invoke_handler之前,设置r-&gt;handler为该处理器的名称即可。处理器的实现和以前一样,只是使用了处理器名称而不是内容类型。处理器的名称可以有"-",但不能有"/",以避免和介质类型名称冲突。