1

正如在这个问题中所讨论的那样,我正在使用带有条件流控制语句的 Apache mod_include来根据父页面的 URL 改变包含的 shtml 文件的行为。我遇到的问题是网站上的某些页面是 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 文件的功能。我不喜欢这个解决方案,因为这意味着将来添加链接需要将它们添加到多个位置。

4

2 回答 2

1

我刚刚开始阅读有关 SSI 的信息,但在 http://httpd.apache.org/docs/2.2/howto/ssi.html#configuring找到了这个引用

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

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

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

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

/菲利普

于 2013-04-07T06:04:37.690 回答
1

假设您正在通过 mod_php 运行 PHP(甚至可能无关紧要),只需添加:

AddOutputFilter INCLUDES .shtml .php

它适用于 .shtml 和 .php 两者都被正确解析。

于 2010-09-02T02:33:53.997 回答