問題の現象
CGI 管理画面 ( admin/admin.cgi や admin/index.cgi ) にアクセスすると「500 Internal Server Error」 (インターナルサーバエラー、内部サーバエラー) が出る。
類似の現象
- 「403 Forbidden / 許可されていません」というエラーが出る場合はこちらを参照して下さい。
- 書き出したHTMLページにアクセスした時にこのエラーが出る場合はこちらを参照して下さい。
- Windowsサーバ IIS (Internet Information Server) をお使いの場合でメッセージが「サーバ内部で障害が発生し、リクエストに応えることができませんでした」と表示される場合はこちらを参照して下さい。
- 今まで使えていたのにある日突然エラーが出るようになった場合はこちらもご参照下さい。
- 「すぐ使えるCMS」のCMS入力画面で画像やファイルをアップロードしようとした時にこのエラーが出る(=入力画面までは表示できる)場合はこちらをご参照下さい。
「500 Internal Server Error」の考えられる原因
- ディレクトリのパーミッション
- CGI ファイルのパーミッション
- Perl のパスの違い
- 改行コード
- 改行コード(Macの場合)
- UTF-8 の BOMコード
- 文法エラー
- 「モジュール」の不足
- .htaccess の問題
- Perl のバージョン
- Apache のバージョンが 2.4 以上
考えられる原因1: ディレクトリのパーミッション
CGI のあるディレクトリ( admin/ ) のパーミッション (権限設定、属性) の設定がサーバと適合していない場合にこのエラーが出ます。
対応方法
CGI を置いたディレクトリのパーミッションは「755 (rwxr-xr-x)」にして下さい。
備考
「777 (rwxrwxrwx)」にしてしまうとエラーが出るサーバが多いです。
考えられる原因2: CGI ファイルのパーミッション
CGIファイルのパーミッション (権限設定、属性) の設定がサーバと適合していない場合にこのエラーが出ます。
対応方法
CGIファイルのパーミッションは「755 (rwxr-xr-x)」にして下さい。
備考
ご利用中のサーバの説明書等で他のパーミッションが推奨されている場合はその通り設定して下さい。
考えられる原因3: Perl のパスの違い
CGIファイルの1行目に設定する Perl のパスが間違っているとこのエラーが出ます。
対応方法
サーバで使用可能な Perl のパスを調べて、正しくパスを設定して下さい。
Perl のパスが分らない場合はサーバの管理者やレンタルサーバ会社に問合せて下さい。一般的には、「Perl のパス」や「プログラムのコマンドパス」などの項目で情報が提供されています。
多くのサーバは以下のように設定されていますので、どうしても情報が分らない場合は以下の設定を試して下さい。
UNIXサーバ (Linux、FreeBSD など含) の場合
以下のいずれか。
#!/usr/local/bin/perl --
#!/usr/bin/perl --
Windowsサーバの場合
#!C:/Perl/bin/perl.exe --
考えられる原因4: 改行コード
CGIファイルの改行コードがサーバに適合していないとこのエラーが出ます。
対応方法
1行目の Perl のパスの後に「 --」 (半角スペースに続けて半角ハイフンを2つ) を追加してアップルロードし直して下さい。
パス変更の例
変更前
#!/usr/bin/perl
変更後
#!/usr/bin/perl --
考えられる原因5: 改行コード(Macの場合)
CGIファイルをMacで編集した時に「改行コード」が変わってしまうと、上記「原因4」の対応を行ってもこのエラーが出ます。
「改行コード」は編集ツール上では目に見えませんが、「CR+LF」「LF」「CR」の3種類あり、「CR」の場合にエラーになります。例えば Mac の「テキストエディット」を使ってテキストファイルを保存すると、通常はこの改行コードが使われます。
また、圧縮された製品ファイルを Mac 上の解凍ソフトで解凍した時も「改行コード」が変わってしまう場合があります。
対応方法1
お使いの編集ツールで改行コードの指定ができれば「LF」(Unix形式)または「CR+LF」(Windows形式)で保存して下さい。
この形式での保存ができるツールが無い場合は、オンラインのテキストエディタを使って下さい。
対応方法2
上記「対応方法1」で改行コードを変えて保存し直してもエラーが出る場合は、FTPツールの「転送モード」を「テキストモード」(または「アスキー」「ASCII」「A」)で再度アップロードして下さい。
FTPツールと「転送モード」についての詳細は「FTPアップロードとパーミッションの設定方法」をご参照下さい。
考えられる原因6: UTF-8 の BOMコード
CGIファイルの文字コードが UTF-8 の場合で、編集に適していないツールを使用して保存してしまうと、このエラーが出ます。
具体的には、ファイルの先頭に編集ツールでは見えない「BOM(※)」と呼ばれる記号が挿入されてしまう場合があり、これがエラーの原因となります。例えば Windows のメモ帳を使って UTF-8 のファイルを保存するとこの形式になります。
※BOM=バイト オーダー マーク、Byte Order Mark
対応方法
「UTF-8 BOMなし」形式で保存できる編集ツールがあればその形式で保存し直して下さい。
この形式での保存ができるツールが無い場合は、オンラインのテキストエディタを使って下さい。
参考情報
このエラーの場合は、文法チェックや実行時に以下の様なエラーが表示される場合があります。
Exec format error. Binary file not executable.
Unrecognized character \357 at admin.cgi line 1.
考えられる原因7: 文法エラー
環境設定などの編集によって文法エラーが出てしまった場合にこのエラーが出ます。
対応方法
文法チェッカーで、文法チェックを行って下さい。
エラー表示された場合、エラー周辺の編集をもう一度見直して下さい。
考えられる原因8: 「モジュール」の不足
プログラムに含まれているモジュール (プラグインのようなもの) の使用がお使いのサーバで制限されている場合があります。
対応方法
文法チェッカーで、文法チェックを行って下さい。「Can't locate ...」で始まるエラーメッセージが表示される場合、このケースに該当します。
この場合はサーバ側の対応が必要ですので、サーバの管理者やレンタルサーバ会社にエラーメッセージをあわせてお問合せ下さい。
考えられる原因9: .htaccess の問題
ディレクトリ内 (または上位のディレクトリ内) にある .htaccess ファイルに問題があると「500 Internal Server Error」が出ます。他のサーバからファイルをまとめて移動した場合はこの問題がよく起こります。
.htaccess の問題に該当するかの確認方法
admin/nofile.html など、ディレクトリ内に無いはずのファイルにアクセスして下さい。
その時に「500 Internal Server Error」が出続け、「404 Not Found / 見つかりません」等に変わらない場合はこの問題に該当する可能性があります。
対応方法
.htaccess のファイルの記載に問題が無いか確認して下さい。よくあるエラーは以下のようなものです。
- Apache のバージョンにより設定方法が違う (Digest認証や SSI、アクセス制限の設定)
- 設定内のファイルパスの間違い (RewriteCond の設定や Basic認証のパスワードファイルのパス)
- 許可されていないオプションを記載してしまった (RewriteLog や RewriteMap、Options 設定の一部など)
備考
FTPソフトで見ると .htaccess が見えない場合がありますので、上記の確認に当てはまるのに .htaccess が見つからない場合は、FTP ソフトの設定で「隠しファイルを表示する」などに変更して下さい。
考えられる原因10: Perl のバージョン
Perl のバージョンが低すぎる場合このエラーが出ます。Perl 5.005 以上が必要です。また、「すぐ使えるCMS」のバージョンが Ver. 2.x 以下の場合、Perl のバージョンが 5.10 以上だとエラーになります。Perl のバージョンが 5.10 以上の場合は「すぐ使えるCMS」を Ver. 3.0 以上にバージョンアップして下さい。
製品ごとにバージョンアップ方法が少しずつ異なりますので、バージョンアップの手順はお使いの製品の最新バージョンに添付の説明書から「バージョンアップの方法」をご参照下さい。
考えられる原因11: Apache のバージョンが 2.4 以上
使用しているWebサーバが Apache でバージョンが 2.4 以上の場合、初期設定でエラーが出る場合があります。
対応方法
製品の初期設定で以下の場所に .htaccess ファイルがあれば、内容を書き換えて下さい。
data/.htaccess
templates/.htaccess
書換え対象の行(消す行)
Order Allow,Deny
書換え後の内容(追加する行)
Require all denied