我正在使用用PHP编写的Ganglia-web-frontend。它使用模板文件添加个人页眉/页脚。我想使用我编写的SSI页面,但SSI代码不是由apache解释的。
更清楚的是,ganglia使用$tpl = new TemplatePower( template("$header.tpl") );
来包含我的标题模板文件。在我的header.tpl文件中,我放了:<!--#include virtual="/include/header.shtml" -->
这是我的包含文件(并且与我的个人页面/脚本完美配合)。
如果查看我在firefox(ctrl + U)中获得的HTML代码,我看到apache已将SSI区域<!--#include virtual="/include/header.shtml" -->
作为注释包含在内,并且尚未对其进行解释。
我认为与解释/执行事物的顺序有关,但我无法找到实现它的方法。有没有人有想法?如果需要,我也可以根本访问apache配置。
提前致谢
编辑:
根据Sasha的建议,我试图添加
AddType text/html .tpl
AddHandler server-parsed .tpl
AddOutputFilter INCLUDES .tpl
到 /etc/apache2/httpd.conf ,但这没有帮助。我不明白......
编辑2:
我想这可能是PHP TemplatePower模块的一个问题。但我无法让它发挥作用。我曾尝试在神经节来源中添加$tpl->assignInclude( "header", "./header.tpl" );
,但这没有帮助。
答案 0 :(得分:4)
Apache是否配置为将.tpl
文件预处理为服务器端包含?如果没有,它将忽略这些文件中的SSI指令。
'Enabling Server-Side Includes' in the mod_include documentation部分详细介绍了如何配置此功能。您需要确保.tpl
和AddType
指令中存在AddOutputFilter
。
答案 1 :(得分:2)
您正在将模板加载为TemplatePower
模板。所以不是apache托管该.tpl文件,但你的脚本是通过TemplatePower
对象。
因此,这超出了apache的内容处理程序和操作处理程序的范围。
如果你正在运行PHP作为apache SAPI,你可以使用virtual()
函数。
然后,您可以扩展模板引擎以解释那些包含虚拟SSI命令并调用virtual()
函数。
所以关键点在于,最终Apache需要通过子请求执行shtml模板。