У меня есть следующая запись под 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.