在PHP中使用Apache服务器端流控制?

时间:2010-08-30 00:19:03

标签: php apache mod-include

正如this question中讨论的那样,我正在使用带有条件流控制语句的Apache mod_include来改变包含的shtml文件的行为,具体取决于父页面的URL。我遇到的问题是网站上的一些页面是PHP页面,这似乎意味着mod_include指令被忽略(而是被视为标准的html注释)。

有没有办法让PHP页面正确处理这些mod_include指令?

具体来说,这就是我想要处理的内容:

<!--#if expr='"$DOCUMENT_NAME" = /(podcasts\.php)|(series\.php)/' -->
<li id="features" class="current">
<!--#else -->
<li id="features">
<!--#endif -->

类似的行块在网站上的.shtml文件中工作,但对于php页面,以上所有内容最终都会输出到客户端。

编辑:我提出的解决方案最接近的是模仿php文件中包含的shtml文件的功能。我不喜欢这个解决方案,因为这意味着将来添加链接需要将它们添加到多个地方。

2 个答案:

答案 0 :(得分:1)

假设您通过mod_php运行PHP(可能不重要)只需添加:

AddOutputFilter INCLUDES .shtml .php

它适用于.shtml和.php都正常解析。

答案 1 :(得分:0)

我刚刚开始阅读有关SSI的内容,但发现了这句话 http://httpd.apache.org/docs/2.2/howto/ssi.html#configuring

  

关于不该做什么的简短评论。你偶尔会看到别人   建议您告诉Apache解析所有.html文件   SSI,这样你就不必乱用.shtml文件名了。这些   人们可能没有听说过XBitHack。要记住的事情   就是这样,通过这样做,你需要Apache通读   它发送给客户的每个文件,即使它们没有   包含任何SSI指令。这可以减慢相当多的速度,并且   不是个好主意。

因此,如果我理解正确,则不应在AddOutputFilter中包含.php,因为如果强制Apache在所有.php页面中搜索SSI指令,因为它会降低服务器的速度。

也许您的问题有另一种解决方案?

http://httpd.apache.org/docs/2.2/mod/mod_include.html#xbithack

/菲利浦