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 になる場合がありますので注意しましょう。
|