2010-08-30 102 views
1

正如this question中讨论的那样,我使用带有条件流控制语句的Apache mod_include来根据父页面的URL改变包含的shtml文件的行为。我遇到的问题是,网站上的一些页面是PHP页面,这似乎意味着mod_include指令被忽略(而不是作为标准html注释处理)。在PHP中使用Apache服务器端流量控制?

有什么办法让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文件的功能。我不喜欢这个解决方案,因为这意味着将来添加链接需要将它们添加到多个位置。

+0

你有'问题<! - #包括虚拟= “foo.php” - >'不是没有被mod_include负责处理执行或.php文件?前者是 – VolkerK 2010-08-30 01:03:07

+0

。在这种情况下,不是专门用'<! - #include - >',而是用'<! - #if expr ='“$ DOCUMENT_NAME”= /(mypage\.php)/ - >' – 2010-08-30 02:01:38

+0

编辑的问题提供更多细节。 – 2010-08-30 02:04:40

回答

1

假设你正在运行通过mod_php,并且PHP(甚至可能没有关系)只是增加:

AddOutputFilter INCLUDES .shtml .php 

,它工作正常两者的.shtml以及带被正确解析.PHP。

+0

是的!将此添加到我的.htaccess文件导致所有页面按需要运行。优秀! – 2010-09-02 22:53:08

0

我刚开始阅读有关SSI却发现这句话在 http://httpd.apache.org/docs/2.2/howto/ssi.html#configuring

什么不该做一个简短的评论。您偶尔会看到人们建议您只告诉Apache解析所有.html文件以获取 SSI,这样您就不必混淆.shtml文件名。这些 人可能没有听说过XBitHack。要记住 的一点是,通过这样做,您要求Apache读取通过 发送给客户端的每个文件,即使它们不包含任何SSI指令。这可能会减慢速度, 不是一个好主意。

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

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

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

/菲利普