呼叫CGI產生HTTP 404錯誤 - Linux

By Jessica
at 2008-07-22T15:34
at 2008-07-22T15:34
Table of Contents
※ 引述《collin2315 (梭哈!)》之銘言:
: 最近在學習HTML呼叫Perl程式 從網路上將一HTML網頁建立於/var/www/html/WSRR中
: HTML如下:
: <HTML>
: <HEAD>
: <TITLE>Test</TITLE>
: </HEAD>
: <BODY>
: <form action="../../cgi-bin/test.pl" method='POST'>
: <input type=text name=test>
: <input type=submit value='Send'>
: </form>
: </BODY>
: </HTML>
: 呼叫位於/var/www/cgi-bin的test.pl程式
想請教一下,您的 apache (或 apache2) 的設定如何?
通常沒有特別指定的話, 預設通常不會在 /var/www/cgi-bin
可否檢查一下您的設定檔裡有沒有以下的敍述
ScriptAlias /cgi-bin/ /xxx/xxx/cgi-bin/
我灌好 apache2 時的預設值是
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
有了這一行設定, 一旦網頁導到 /cgi-bin/ 時, 會自動導到 /usr/lib/cgi-bin/
附帶一提的是, 如果你要設定 /var/www/cgi-bin/ 成為可執行 CGI 的資料夾,
必須要把該資料夾的 CGI 權限打開, 例如, 在您的 apache 設定檔裡,
<Directory "/var/www/cgi-bin/">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
** ExecCGI 必須為 Options 的其中之一
: test.pl如下
: #!perl
: print "content-type:text/html","\n\n";
: if ($ENV{'REQUEST_METHOD'} eq 'GET')
: {
: $querry=$ENV{'QUERY_STRING'};
: }
: elsif($ENV{'REQUEST_METHOD'} eq 'POST')
: {
: read(STDIN, $querry, $ENV{'CONTENT_LENGTH'} );
: }
: @querry=split(/&/,$querry);
: foreach $pair (@querry)
: {
: ($name,$value)=split(/=/,$pair);
: $value=~s/\+//g;
: $value=~s/%0D%0A/<br>/g;
: $value=~s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
: $FORM{$name}=$value;
: }
: $testvalue=$FORM{'test'};
: 開啟網頁並鍵入文字時,卻產生HTTP 404的錯誤
: (一開始為HTTP 500的錯誤,後來修改程式與chmod 755後變成404)
404 表示所指向的內容不存在, 因此我認為 test.pl 沒有被讀取
: 另外,在/var/www/cgi-bin中產生一txt做測試也無法直接從IE開啟
: (ex: http://ip/cgi-bin/test.txt)
: 想請問各位前輩我該如何解決? 謝謝回覆
: PS: OS是CentOS release 5 (Final)
--
: 最近在學習HTML呼叫Perl程式 從網路上將一HTML網頁建立於/var/www/html/WSRR中
: HTML如下:
: <HTML>
: <HEAD>
: <TITLE>Test</TITLE>
: </HEAD>
: <BODY>
: <form action="../../cgi-bin/test.pl" method='POST'>
: <input type=text name=test>
: <input type=submit value='Send'>
: </form>
: </BODY>
: </HTML>
: 呼叫位於/var/www/cgi-bin的test.pl程式
想請教一下,您的 apache (或 apache2) 的設定如何?
通常沒有特別指定的話, 預設通常不會在 /var/www/cgi-bin
可否檢查一下您的設定檔裡有沒有以下的敍述
ScriptAlias /cgi-bin/ /xxx/xxx/cgi-bin/
我灌好 apache2 時的預設值是
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
有了這一行設定, 一旦網頁導到 /cgi-bin/ 時, 會自動導到 /usr/lib/cgi-bin/
附帶一提的是, 如果你要設定 /var/www/cgi-bin/ 成為可執行 CGI 的資料夾,
必須要把該資料夾的 CGI 權限打開, 例如, 在您的 apache 設定檔裡,
<Directory "/var/www/cgi-bin/">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
** ExecCGI 必須為 Options 的其中之一
: test.pl如下
: #!perl
: print "content-type:text/html","\n\n";
: if ($ENV{'REQUEST_METHOD'} eq 'GET')
: {
: $querry=$ENV{'QUERY_STRING'};
: }
: elsif($ENV{'REQUEST_METHOD'} eq 'POST')
: {
: read(STDIN, $querry, $ENV{'CONTENT_LENGTH'} );
: }
: @querry=split(/&/,$querry);
: foreach $pair (@querry)
: {
: ($name,$value)=split(/=/,$pair);
: $value=~s/\+//g;
: $value=~s/%0D%0A/<br>/g;
: $value=~s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
: $FORM{$name}=$value;
: }
: $testvalue=$FORM{'test'};
: 開啟網頁並鍵入文字時,卻產生HTTP 404的錯誤
: (一開始為HTTP 500的錯誤,後來修改程式與chmod 755後變成404)
404 表示所指向的內容不存在, 因此我認為 test.pl 沒有被讀取
: 另外,在/var/www/cgi-bin中產生一txt做測試也無法直接從IE開啟
: (ex: http://ip/cgi-bin/test.txt)
: 想請問各位前輩我該如何解決? 謝謝回覆
: PS: OS是CentOS release 5 (Final)
--
Tags:
Linux
All Comments
Related Posts
Fedora 7 kernel source code~

By Andrew
at 2008-07-22T15:01
at 2008-07-22T15:01
我如果重灌XP為LINUX,那我D槽裡的東西 …

By Blanche
at 2008-07-22T15:00
at 2008-07-22T15:00
NFS on XP

By Oscar
at 2008-07-22T14:28
at 2008-07-22T14:28
Fedora 7 kernel source code~

By Lily
at 2008-07-22T12:25
at 2008-07-22T12:25
make的問題...

By Candice
at 2008-07-22T12:23
at 2008-07-22T12:23