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

时间:2014-04-19 07:22:29

标签: php apache .htaccess redirect handlers

好的,所以这是我的情况:

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

这是我到目前为止所尝试的内容(除了...... exec通过PHP的混乱解决方案... lol):

的.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的专家有任何关系,所以我想这整件事情可能比我预期的要容易得多;所以请光一点! : - )

1 个答案:

答案 0 :(得分:0)

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

你必须仔细检查你的错误日志,但我怀疑在服务.lgml文件时,Apache发现,lgm-cgi处理程序不存在并且回退到default-handler,它为你的文件服务文本。

但是,你在这里使用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