2

我有一个 10 年历史的 Apache 服务器(FreeBSD),其中以下工作:

文件1.htm

<!-- #set var="myDir" value="/dir" -->

文件2.htm

<!-- #include virtual="File1.htm" -->    //sets myDir
<!-- #include virtual="${myDir}/File3.htm" --> //loads /dir/File3.htm

文件3.htm

<!-- #include virtual="${myDir}/File4.htm --> //loads /dir/File4.htm

在具有最新 Apache 的最新 Suse Linux 上,似乎 myDir 未在 File3.htm 中定义,因此无法找到并加载 File4。

所以 File2 可以加载 File3,但 File3 加载 File4 失败。它适用于 FreeBSD 上已有 10 年历史的 Apache,但不适用于 Linux 上最近的 Apache....

有任何想法吗?

编辑为了完整起见,这基本上是配置文件:

DocumentRoot "/srv/www/htdocs"
<Directory "/srv/www/htdocs">
        Options Includes
        AddType text/html .htm
        AddOutputFilter INCLUDES .htm
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>
4

1 回答 1

2

我已经在我的 Ubuntu 11.04 系统(使用 Apache 2.2.17)上进行了测试,我完全没有问题。
以下是我使用的文件:

File1.htm(位于 File2.htm 的同一文件夹中)

<ul>
    <li>
        <p>Start File1</p>
        <!--#set var="myDir" value="/test/stackoverflow/ssi" -->
        <!--#echo var="myDir" -->
        <p>End File1</p>
    </li>
</ul>

File2.htm(位于 File1.htm 的同一文件夹中)

<!DOCTYPE html>
<html>
    <head>
        <title>Apache SSI test</title>
    </head>
    <body>
        <ul>
            <li>
                <p>Start File2</p>
                <!--#include virtual="File1.htm" -->
                <p><!--#echo var="myDir" --></p>
                <!--#include virtual="${myDir}/File3.htm" -->
                <p>End File2</p>
            </li>
        </ul>
    </body>
</html>

File3.htm(位于“ssi”子文件夹中)

<ul>
    <li>
        <p>Start File3</p>
        <p><!--#echo var="myDir" --></p>
        <!--#include virtual="${myDir}/File4.htm" -->
        <p>End File3</p>
    </li>
</ul>

File4.htm(位于“ssi”子文件夹中)

<ul>
    <li>
        <p>Start File4</p>
        <p><!--#echo var="myDir" --></p>
        <p><!--#echo var="DATE_LOCAL" --></p>
        <p>End File4</p>
    </li>
</ul>

这是我的“.htaccess”文件:

Options +Includes
AddType text/html .htm
AddOutputFilter INCLUDES .htm

这是我通过在浏览器中请求页面“File2.htm”得到的输出:

  • 启动文件 2

    • 启动文件 1

      /test/stackoverflow/ssi

      结束文件1

    /test/stackoverflow/ssi

    • 启动文件 3

      /test/stackoverflow/ssi

      • 启动文件 4

        /test/stackoverflow/ssi

        2012 年 8 月 30 日星期四 21:45:57 CEST

        结束文件4

      结束文件3

    结束文件2


您还应该:

  • 检查所有 .htm 文件和包含文件夹(在您的示例中应该是“/dir”文件夹)的权限,以确保 Web 服务器可以读取所有文件。
  • 检查 Apache 错误日志中的错误

顺便说一句,我想您的“File3.htm”中缺少的结束引号只是一个错字。

于 2012-08-30T20:16:38.007 回答