電子書籍の厳選無料作品が豊富!

500 Internal Server Errorが出ます。

サーバ:CentOS6.4
サーバ側の文字コード:UTF-8
perlのパス:/usr/bin/perl
index.cgiの文字コード:LF (サーバ上で直接作成)
index.cgiのパーミッション:777 (パーミッションの問題を避けるためわざと、777に設定)

ここで、サーバ上で直接実行
perl /var/www/html/index.cgi
すると、正しく処理の結果が返ってきてエラーは出ません。
しかし、クライアントのブラウザでindex.cgiにアクセスすると、500 Internal Server Errorが出ます。
なお、index.cgiを設置するディレクトリはApacheで以下のように設定しcgiスクリプトを有効にしています。

<Directory “/var/www/html”>
Options FollowSymLinks ExecCGI
</Directory>
AddHandler cgi-script .cgi .pl
#AddDefaultCharset UTF-8

*******************************************************
【/var/www/html/index.cgi】
#!/usr/bin/perl

print "Content-type: text/html";
print "<html>";
print "<body>";
print "<p>";
print "CGI";
print "</p>";
print "</body>";
print "</html>";

スクリプトの文法に問題があれば、サーバ上で直接実行させた時点でエラーを吐きそうですし、
パーミッションは777にしていますし、Apacheの設定もcgiを有効にしているので
他に500 Internal Server Errorが出る原因が掴めません。

Apacheの設定で、#AddDefaultCharset UTF-8 として文字セットを無効にした場合は
CGIスクリプトの方で何か追加してやらないと、文字化け以前の問題で必ず500 Internal Server Errorを吐くんですかね?

ご指導のほどよろしくお願い致します。

A 回答 (2件)

Perlのプログラムとしては間違いはないけれど、CGIとして間違っています。



CGIで期待される出力は
ヘッダ(複数行の場合あり、空行不可)
空行
本体
という形式です。

Perlのprintは、明示的に改行コードを指定しなければ、改行しません。
本体にあたるHTML部分は改行が無くても問題ありませんが、ヘッダと区切りの改行は必須です。
    • good
    • 0

/var/log/httpd-error.log など、エラーログに詳細が出ていると思います。


この情報をいただけると、より回答がしやすくなります。

print "Content-type: text/html"; → print "Content-type: text/html\n\n";※ となります。

おそらく、エラーログには、※が原因で"Bad Header"など出ておりませんでしょうか。

Perl上正しくとも、CGI上間違っている場合、エラーログが参考になります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!