Apache-2.2

在 Apache 權限問題下使用 Perl 執行 CGI

  • April 21, 2010

我的 Debian 框中有以下條目apache2.conf

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

確保你有一個 cgi-bin 目錄的 <Directory> 部分。並確保其中包含“所有人允許”。

&lt;Directory /var/www/mychosendir/cgi-bin&gt;
   Options +ExecCGI -Indexes
   allow from all
&lt;/Directory&gt;

另外…您的 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

引用自:https://serverfault.com/questions/134432