2014-04-19 44 views
0

好了,这里是我的情况:自定义操作/处理器为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的,所以我想这件事可能是比我预期的要容易得多;所以请摆脱一些光! :-)

+0

考虑到您正在尝试使用.htaccess样式文件,我们可以假设您不能访问真实的服务器配置?所以很可能这是一个托管环境?你确定你可以在该环境中执行cli命令吗?不幸的是,你可能也无法访问服务器错误日志文件? – arkascha

+0

@arkascha好吧,错误的猜测。我拥有服务器。 (Debian Wheezy + Apache2安装)所以,我可以完全访问任何东西;随时提出建议! –

+0

那么为什么你使用.htaccess样式文件呢?他们出了名的错误容易,难以调试,使事情变得复杂,并且真正减慢了服务器的速度。把这些东西放到服务器配置中!然后重新加载服务器并观察其错误日志文件。 – arkascha

回答

0

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

你将不得不仔细检查你的错误日志,但我怀疑在提供.lgml文件时,Apache发现,该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 
+0

很久以前,但这是我的工作原理。所以,感谢分享! (谁知道,别人可能也需要它);-) –

+1

不正确。 “Action”可用于创建由CGI脚本实现的自定义处理程序。你不需要编写一个模块。 http://httpd.apache.org/docs/2.2/handler.html – kbro

+0

@kbro我忘了CGI脚本的要求。那里好抓。不同意其余的。如果您真的认为Action引入了自定义处理程序,那么请介绍一个,然后将其与SetHandler指令一起使用。如果你能想出这样的配置,我可能会改变主意:) –

相关问题