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

Php Apache的自定义操作/处理程序,php,apache,.htaccess,redirect,handlers,Php,Apache,.htaccess,Redirect,Handlers,好的,我的情况如下: 我已经写了一个翻译(为我自己设计的语言) 我需要首先由我的解释器处理每个具有特定扩展名(例如.xxx)的文件 以下是我迄今为止所尝试的(除了通过PHP使用exec的混乱解决方案…lol): .htaccess Options -ExecCGI -MultiViews -Includes -Indexes FollowSymLinks Action lgm-cgi /usr/local/bin/lgm -c AddHandler lgm-cgi .lgml 但是你猜怎

好的,我的情况如下:

  • 我已经写了一个翻译(为我自己设计的语言)
  • 我需要首先由我的解释器处理每个具有特定扩展名(例如
    .xxx
    )的文件
以下是我迄今为止所尝试的(除了通过PHP使用
exec
的混乱解决方案…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

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



我不认为自己接近任何关于服务器配置和HTTAccess的专家,所以我想这整个事情可能比我想象的要容易得多。所以请给我点启示!:-)

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

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

但是,您在此处使用适当的操作是正确的。你只需要换一种方式来使用它。首先,应为文件引入自定义类型:

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

考虑到您正在尝试使用.htaccess样式的文件,我们可以假设您没有访问真实服务器配置的权限?那么这很可能是一个托管环境?您确定可以在该环境中执行cli命令吗?不幸的是,您可能也无法访问服务器错误日志文件?@arkascha嗯,猜错了。我拥有服务器。(Debian Wheezy+Apache2安装)因此,我可以完全访问任何内容;请随意提出任何建议!那么为什么要使用.htaccess样式的文件呢?它们是出了名的容易出错、难以调试、使事情变得复杂并且确实会降低服务器的运行速度。把这些东西放到服务器配置中!然后重新加载服务器并查看它的错误日志文件。@arkascha好吧,我试过了,但我觉得很失落,这就像做我在周围看到的随机事情,并期望它们工作一样。你有什么具体的想法要写什么,在哪里,以实现我的努力?你的行似乎没有不合理的,否则我会指出显而易见的事情。那么再一次:错误日志文件说了什么?很久以前,但我就是这样让它工作的。所以,谢谢分享!(谁知道,其他人可能也需要它);-)不是真的。“Action”可用于创建由CGI脚本实现的自定义处理程序。您不需要编写模块@kbro我忘记了CGI脚本的要求。接得好。不同意其他人的意见。如果您真的认为Action引入了一个自定义处理程序,那么请引入一个,然后将其与SetHandler指令一起使用。如果你能想出这样的配置,我可能会改变主意:)