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

Запуск CGI с Perl при проблеме с разрешениями Apache

У меня есть следующая запись под apache2.conf в моем ящике Debian.

AddHandler cgi-script .cgi .pl
Options +ExecCGI
ScriptAlias /cgi-bin/ /var/www/mychosendir/cgi-bin/

<Directory /var/www/mychosendir/cgi-bin>
Options +ExecCGI -Indexes
allow from all
</Directory>

Затем у меня есть сценарий perl cgi, хранящийся в этих каталогах и разрешениях:

nvs@somename:/var/www/mychosendir$ ls -lhR 
.:
total 12K
drwxr-xr-x 2 nvs nvs 4.0K 2010-04-21 13:42 cgi-bin

./cgi-bin:
total 4.0K
-rwxr-xr-x 1 nvs nvs 90 2010-04-21 13:40 test.cgi

Однако, когда я попытался получить к нему доступ в веб-браузере:

http://myhost.com/mychosendir/cgi-bin/test.cgi

Они дали мне эту ошибку:

[Wed Apr 21 15:26:09 2010] [error] [client 150.82.219.158] (8)Exec format error: exec of '/var/www/mychosendir/cgi-bin/test.cgi' failed
[Wed Apr 21 15:26:09 2010] [error] [client 150.82.219.158] Premature end of script headers: test.cgi

Что с этим не так?

Обновить:

У меня также есть следующая запись в моем apache2.conf:

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

И содержание test.cgi это:

#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
print "Hello, world!\n";

Убедитесь, что у вас есть раздел <Directory> для каталога cgi-bin. И убедитесь, что в нем есть "разрешить от всех".

<Directory /var/www/mychosendir/cgi-bin>
    Options +ExecCGI -Indexes
    allow from all
</Directory>

Также ... ваш ScriptAlias ​​предназначен для / cgi-bin /. Ваш URL-адрес / mychosendir / cgi-bin. Если у вас не происходит магия перезаписи, ваш URL-адрес, вероятно, должен быть http://my.host.com/cgi-bin/test.cgi , или вам нужно будет изменить строку ScriptAlias, чтобы она выглядела как

ScriptAlias /mychosendir/cgi-bin/ /var/www/mychosendir/cgi-bin

Ошибка, которую вы опубликовали в своем обновлении, похоже, что у вас нет #! строка в начале вашего скрипта. Вам понадобится один, и он должен выглядеть так:

#!/path/to/your/perl

«Преждевременное завершение заголовков сценария» означает, что сценарий CGI не распечатывает правильный заголовок HTTP. Необходимо распечатать не менее

Content-Type: text/html;

Кроме того, у вас есть

ScriptAlias /cgi-bin/ /var/www/mychosendir/cgi-bin/

и все же вы просите

http://myhost.com/mychosendir/cgi-bin/test.cgi

Которые должны быть

http://myhost.com/cgi-bin/test.cgi

или скажи

ScriptAlias /mychosendir/cgi-bin/ /var/www/mychosendir/cgi-bin/

Вы уверены, что пользователь / группа Apache имеет доступ на чтение и выполнение для данных файлов? Обычно этого пользователя называют httpd или www-data.