Apache SSI和变量

时间:2012-08-28 02:59:49

标签: apache ssi server-side-includes

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

File1.htm

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

File2.htm

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

File3.htm

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

在最新的Suse Linux上使用最新的Apache,似乎就是这样 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>

1 个答案:

答案 0 :(得分: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”页面时得到的输出:

        
  •         

            启动File2         

            
                  
    •                 

                      启动File1                 

                      /测试/计算器/ SSI                 

                      结束File1                 

                  
    •         
            

            /测试/计算器/ SSI         

            
                  
    •                 

                      启动File3                 

                      

                      /测试/计算器/ SSI                 

                      
                            
      •                         

                                启动File4                         

                                

                                /测试/计算器/ SSI                         

                                

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

                                

                                结束File4                         

                            
      •                 
                      

                      结束File3                 

                  
    •         
            

            结束File2         

        


你还应该:

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

顺便说一下,我认为你的“File3.htm”中缺少的结束语只是一个错字。