Apache的自定义操作/处理程序


Custom Action/Handler for Apache

好的,下面是我的情况:

  • 我写了一个翻译(为我自己设计的语言)
  • 我需要每个具有特定扩展名(例如.xxx)的文件首先由我的解释器处理

以下是我迄今为止尝试过的(除了…通过PHP使用exec的混乱解决方案…哈哈):

.htaccess

Options -ExecCGI -MultiViews -Includes -Indexes FollowSymLinks
Action lgm-cgi /usr/local/bin/lgm -c
AddHandler lgm-cgi .lgml

但你猜怎么着:不起作用。

我请求www.mydomain.com/index.lgml,它没有返回处理过的文件,而是返回与文本完全相同的文件(index.lgml)。

我做错了什么?有什么建议吗?


我不认为自己是服务器配置和.htaccess方面的专家,所以我想这整件事可能比我预期的要容易得多;所以请放点光!:-)

您混合了两个不同的概念:处理程序和操作。您必须编写一个模块来将新的处理程序引入httpd服务器。之后,您必须使用AddHandler或SetHandler将其与特定的文件类型和/或URL空间绑定。

您可能需要仔细检查错误日志,但我怀疑,在提供Apache发现的.lgml文件时,lgm-cgi处理程序不存在,并返回到默认处理程序,该处理程序将您的文件作为纯文本提供。

但是,您在适当的时候使用Action是正确的。你只需要以不同的方式使用它。首先,您应该为您的文件引入一个自定义类型:

AddType application/lgml .lgml

然后将该类型与您的操作关联起来:

Action application/lgml /usr/local/bin/lgm -c

这应该行得通。

编辑:正如kbro所指出的,Action的第二个参数应该是CGI脚本。所以你必须写一个(比方说/cgi-bin/lgm-handler.sh),在引擎盖下调用/usr/local/bin/lgm。然后你会把它引入到服务器中:

Action application/lgml /cgi-bin/lgm-handler.sh