CGI設置でFAQのInternal Server Error対策


500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, xxxxxx@xxxxxx.xxx and inform them of the time the error occurred, and anything you might have done that may have caused the error.


対策1
samba経由でCGIを転送した場合などによく上記のようなエラーになります。
私もこのエラーではまりました。フリーのCGIは、Windowsで動作するものもありますのでsamba経由で転送した場合に下記に示したような改行コードでエラーになります。
■ Windows系のCGI改行コードが「CRLF」
■ Linux(Unix)系のCGI改行コードが「LF」
■ Macintosh系のCGI改行コードが 「CR 」
WindowsからLinuxへsambaで転送した場合は、
転送後に、

 # mv (cgi名).cgi (cgi名).cgi.bak →一度リメイクでbakファイルを作る
 # perl -pe 's/\r\n/\n/' (cgi名).cgi.bak >(cgi名).cgi →改行変換して上書きします。
のように改行変換してあげるか、
FTPソフトを使用してFTP経由で転送すれば、OSに合わせて改行コードを自動変換してくれますのでこちらを使用した方が無難かもしれませんね。


ファイルの行末の改行形式の変換は、スクリプト言語のPerlを使うと簡単に行うことができる。行末にはLinuxでは『\n』、WindowsXX(DOS)では『\r\n』そしてMacintoshでは『\r』が付いているので、次のように互いに置き換えてやればよい。
Linux
→ Windows
# perl -pe 's/\n/\r\n/' linuxfile > winfile

Linux → Macintosh
# perl -pe 's/\n/\r/' linuxfile > macfile

Windows → Linux
# perl -pe 's/\r\n/\n/' winfile > linuxfile

Windows → Macintosh
# perl -pe 's/\r\n/\r/' winfile > macfile

Macintosh → Linux
# perl -pe 's/\r/\n/g' macfile > linuxfile

Macintosh → Windows
# perl -pe 's/\r/\r\n/g' macfile > winfile


対策2
#! /usr/local/bin/perl ← 左記のような場合、LinuxRedHat系では、perlプログラムのディレクトリ位置が違うので上記のようなInternal Server Errorメッセージがでます。
LinuxRedHat系は、 perlの存在場所を指定を以下のように指定します。
CGIプログラムの1行目の記述を #! /usr/bin/perl として下さい。
perlの位置確認するには、以下で確かめてください。
 # which perl



対策3
外部スクリプトを呼べない場合によくでます。
外部スクリプト「jcode.pl」や「cgi-lib.pl」がありますが、
#require "jcode.pl"; といったように先頭にコメントを表す#が付いている場合にエラーになりますので付いていれば外します。
スクリプト名が間違っている場合に、たとえば「jcode.pl」を「jcd.pl」としている時や「JCODE.PL」といったように大文字小文字の区別をしていなかったりしているとエラーが起きますので注意してください。



対策4
ヘッダー部分に注意
対策1の改行コードと同じことなのですが特にhtml文のヘッダー部分に注意しましょう。
CGIスクリプト記述部分でヘッダー部分 → print ("Content-type: text/html;charset=Shift_jis\n\n");
Content-typeのcharset=Shift_jisの最後に「\n\n」が抜けていると 500 Internal Server Error になる場合がありますので注意しましょう。



よく見られる他のエラーは、

403 Forbidden

Forbidden

You don't have permission to access CGIプログラム名 on this server.

パーミッションの設定で権限が無い時にでます。
CGIプログラムをサーバーに転送するだけではだめで、パーミッションを変更する必要が有ります。



404 File Not Found

File Not Found

The requested URL CGIプログラム名 was not found on this server.

アドレスが間違っているため、指定したアドレスには存在しない時にでます。
アドレスを再度確認する。アップロードしたつもりが実際されていないのかもしれません。