无法将SSI包含一些CGI脚本

我在一个Apache服务器上有一个页面site.shtml ,其中我想包含几个CGI脚本,如下所示:

  <p><pre><!--#include virtual="files/testfile" --></pre></p> <p><pre><!--#include virtual="cgi-bin/randhtml.cgi"--></pre></p> <p><pre><!--#include virtual="cgi-bin/echo.cgi" --></pre></p> <p><pre><!--#include virtual="echo.cgi" --></pre></p> <p><pre><!--#include virtual="cgi-bin/echo.cgi?test" --></pre></p> 

在这种情况下, files/testfile是一个文本文件, cgi-bin/randhtml.cgi是一个预先安装的CGI可执行文件, echo.cgi两个实例都是脚本:

 #!/bin/sh echo $0; echo $*; 

所有脚本的权限设置为755,并可以从shell执行,其行为如预期(随机输出或回显参数)。

当我尝试加载网页,文件和随机脚本正确执行,我得到了预期的输出。 回声脚本不是,我在页面中得到了一些错误:

 This is a test text file. random An error occurred while loading this page. An error occurred while loading this page. An error occurred while loading this page. 

错误日志仅包含:

 unable to include "cgi-bin/echo.cgi" in parsed file /home1/user/public_html/site.shtml unable to include "echo.cgi" in parsed file /home1/user/public_html/site.shtml unable to include "cgi-bin/echo.cgi?test" in parsed file /home1/user/public_html/site.shtml 

我用各种其他脚本(shell和perl)进行了testing,命名为.cgi和.pl(Apache被设置为可以作为CGI脚本处理),并且都显示出这个错误。 我已经仔细检查了权限,并用777试了一下,无济于事。 我写的虚拟path为cgi-bin//cgi-bin/ ,都不起作用。

有我遇到的一些限制,语法错误,或一些奇怪的服务器问题?

您可能需要为您的CGI输出添加一个Content-type头。

你确定在你的Apache错误日志里没有别的东西出现吗? (你是在欺骗他们,还是在不经过滤的情况下看他们?)当我试图重新创build你的问题时,我看到如下的行:

 [Sun Dec 11 07:27:47 2011] [error] [client 192.0.2.1] unable to include "cgi-bin/echo.cgi" in parsed file /var/data/www/www.example.org/ssi-test.shtml 

…但他们伴随着:

 [Sun Dec 11 07:31:39 2011] [error] [client 192.0.2.1] malformed header from script. Bad header=/var/data/www/www.example.org: echo.cgi 

我怀疑如果你添加:

 echo "Content-type: text/html" echo "" 

…到脚本的顶部,在任何其他输出出现之前,您的问题将消失…或至less这部分将会。 🙂