CGIが動かない “Internal Server Error” “Premature end of script headers”

あるサイトにperlで書かれたCGIをのせてみると、動かない!

色々と工夫してみるものの、 

“Internal Server Error” がブラウザに表示され、Apacheのログには、

“Premature end of script headers”

エラーが記録されている。

 

知り合いの、さらに知り合いのサイトで、サーバの情報は得られない。大塚商会さんのサーバということしか分からない。

 

■.htaccessはダメだった 

.htaccessを設置して Options +ExecCGI を指定したが、ダメ。

 

■ディレクトリのアクセス権限の変更 

結局、今回設置するCGIのディレクトリのアクセス権を変更する事で、無事に解決した。

 

utf-mailというディレクトリのアクセス権を以下のように変更した。

(修正前)

drwxrxxr-x utf-mail 

 

(修正後)

drwxr-xr-x utf-mail

 755や700だと、大丈夫だった。オーナー以外が書き込み権限を持てる775と777は許可されていないらしい。

 

このサーバー、どうもsuexecの設定を有効にしているみたい。

 

参考サイト:

http://httpd.apache.org/docs/2.0/ja/howto/cgi.html 

 

 

■テスト用CGIプログラム

テストに使用した簡単なCGI。

test.cgi

#! /usr/bin/perl
print "Content-type:text/html\n\n";
print "test"; 

 

ポイントは、 1行目のパスを/usr/bin/perlか/usr/local/bin/perlなど、環境に合わせる。

次のポイントは、Content-typeを含み、後に空行の続くHTTPヘッダ を吐き出すこと。

 

755を指定するのを忘れずに。(場合によっては700)