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";
答案1
确保 cgi-bin 目录有一个 <Directory> 部分。并确保其中包含“allow from all”。
<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
答案2
您确定 Apache 用户/组对给定文件具有读取和执行权限吗?通常此用户称为 httpd 或 www-data。
答案3
“脚本标头过早结束”意味着 CGI 脚本没有打印出正确的 HTTP 标头。它至少需要打印出
内容类型: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/