「CGIが500エラーで動かない…」
パーミッションも合っているし、Perlパスも正しい。なのにエラーが出る…。
そんな時、意外なところに落とし穴があります。
私も1時間以上悩みましたが、たった5秒で直る超初歩的な原因でした。
本記事では、CGIの500エラーの意外な原因と、すぐできる解決法を紹介します。
CGIが500エラーになるよくある原因
- パーミッション(755になっていない)
- Perlパスの指定ミス
- ファイル形式の誤り(BOM付きなど)
- 改行コードの不一致(今回の原因!)
多くの解説記事では上2つが注目されがちですが、改行コードも重要なチェックポイントです。
今回の原因:改行コードがLFじゃなかった
私の場合、配布CGIを少し改変してアップロードしただけなのに、すべて500エラー。
結局、改行コードが「CRLF」のままになっていたことが原因でした。
サーバー(Linux)は「LF」を期待しているので、Windowsの改行「CRLF」では正しく動作しません。
改行コードとは?なぜエラーにつながる?
パソコンで文章を書くとき、Enterキーを押すと行が変わりますよね?
実はこの「改行」にも見えない記号(=改行コード)が入っています。
この改行コードは、使っているパソコンの種類(OS)によって違います。
- Windows:CRLF(「行を変える」+「次の行へ移動する」2つの命令)
- macOSやLinux(サーバー側):LF(「次の行へ移動する」だけ)
この違いがあるため、Windowsで保存したCGIファイルをそのままサーバーにアップロードすると、
サーバー側は「知らない命令(CR)」を読み取って、エラーを起こすことがあるんです。
たとえるなら、
Windowsの改行は「句読点(。)を2つ使って文章を区切る」ようなもの。
一方で、Linuxは1つの句読点で意味が通じる前提。
だから2つあると「え、これ何?間違い?」となって処理を止めてしまいます。
CGIは「命令の書かれたプログラム」です。
そこに余計な文字(=Windows特有の改行コード)が混じってしまうと、正しく読み込めなくなることがあります。
それが「500エラー」という形で現れるわけですね。
改行コードをLFに変更する方法【VS Code編】
- VS Codeで該当CGIファイルを開く
- 画面右下の「CRLF」をクリック
- 「LF」を選択
- ファイルを保存

VS Codeの右下部分。
この『CRLF』が改行コードになるので、『LF』に変更しましょう。
クリックすれば選択肢が出てくるはずです。
これで保存すれば改行コードがLFになる!超簡単!

LFを選んだら、必ず保存を忘れずに!
補足:それでもCGIが動かない場合は?
今回紹介した「改行コードの変更」を試しても、まだ500エラーが直らないことがあります。
その場合、他の小さな設定ミスが原因かもしれません。
以下の2点もあわせて確認してみてください。
ファイルの文字コードは「UTF-8(BOMなし)」になっているか?
ファイルを保存する際の文字コードにも注意が必要です。
とくにWindowsでは、エディタによっては「UTF-8(BOM付き)」という形式で保存されることがあります。
この「BOM(Byte Order Mark)」は、サーバーにとっては余計な情報になるため、CGIが正しく動かなくなる原因になります。
→ 保存時は「UTF-8(BOMなし)」を選ぶようにしましょう。
VS Codeでは、「ファイル」→「名前を付けて保存」→「エンコーディング」(或いはFormat)から選択できます。
● サーバーの「エラーログ」を見てみよう
それでも原因がわからない場合は、レンタルサーバーの管理画面にある「エラーログ」を確認してみましょう。
エラーログには、CGIがどの行でエラーを起こしているか、どんな問題があったかが記録されていることがあります。
難しそうに見えますが、「syntax error」や「unexpected character」などの英単語がヒントになることも多いです。
まとめ|CGIの500エラーで真っ先に改行コードをチェックしよう
CGIが動かないとき、ついパーミッションやパスばかり見がちですが、
実は改行コードという単純なミスが原因のこともあります。
特にWindowsで編集したファイルをサーバーにアップする際は、
改行コードがLFになっているか必ず確認しましょう。