无法通过 SSI 包含某些 CGI 脚本

无法通过 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 执行,它们的行为符合预期(随机输出或回显参数)。

当我尝试加载网页时,文件和随机脚本可以正确执行,并且我得到了预期的输出。 echo 脚本却不行,页面中出现了许多错误:

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,分别名为 .cgi 和 .pl(Apache 设置为将两者都作为 CGI 脚本处理),似乎都出现了此错误。我仔细检查了权限,并尝试使用 777,但无济于事。我将虚拟路径写为 和cgi-bin//cgi-bin/但都不起作用。

我是否遇到了一些限制、语法错误或一些奇怪的服务器问题?

答案1

您可能需要向 CGI 输出添加 Content-type 标头。

你确定你的 Apache 错误日志中没有出现其他内容吗?(你是在 grep 它们,还是在不经过筛选的情况下查看它们?)当我尝试重现你的问题时,我看到如下几行:

[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 ""

... 到脚本的顶部,在出现任何其他输出之前,您的问题将会消失...或者至少其中的这一部分将会消失。:-)

相关内容