Назад | Перейти на главную страницу

Невозможно в SSI включить некоторые сценарии CGI

У меня есть страница site.shtml на сервере Apache, в который я пытаюсь включить несколько сценариев 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 и могут выполняться из оболочки, где они ведут себя, как ожидалось (случайный вывод или повторение аргументов).

Когда я пытаюсь загрузить веб-страницу, файл и случайный сценарий выполняются правильно, и я получаю ожидаемый результат. Эхо-скриптов нет, и я получаю ряд ошибок на странице:

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/, ни то, ни другое не работает.

Есть ли у меня какие-то ограничения, синтаксическая ошибка или странная проблема с сервером?

Возможно, вам потребуется добавить заголовок Content-type к выходным данным CGI.

Вы уверены, что в ваших журналах ошибок Apache поблизости ничего не отображается? (Вы их просматриваете или смотрите на них без фильтров?) Когда я пытался воссоздать вашу проблему, я вижу такие строки:

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

... в начало вашего скрипта, прежде чем появится какой-либо другой вывод, ваша проблема исчезнет ... или, по крайней мере, эта ее часть исчезнет. :-)