------------------------------------------------------
다음글은 이지나라의 CGI FAQ에 등록되어 있는 글입니다.
------------------------------------------------------

FAQ for CGI Errors
CONTENTS
1. Server Error (500 Server Error)
2. 501 Not Implemented (Not Supported Error)
3. 403 Forbidden Error
4. 404 Not Found
5. cgiwrap Error
6. 스크립트가 실행되지 않고 코딩 내용이 화면에 나올 경우
7. 해당 디렉토리의 index.html을 실행시켰을 때 파일들의 리스트 나열되는 경우

--------------------------------------------------------

[500 Server Error (Server Error or Internal Server Error) ]

이 에러는 CGI를 운용할 때, 가장 많이 일어나는 에러 입니다.
가장 광범위한 이유로 일어나는 에러이므로, 가장 처리하기가 까다로우면서,
또 이유를 알고보면 가장 간단한 경우일 수도 있습니다.

이 에러를 수정할 수 있는 방법을 하나 하나 설명해 보겠습니다.

1.먼저 계정의 쉘 상태에서 그 CGI프로그램을 실행시켜 봅니다.

즉 방명록의 경우에는 guestbook 디렉토리에서
perl guestbook.cgi 와 같은 형태로 명령을 줍니다.
만약, 그 스크립트가 문법적인 오류(syntax error)가 있으면
perl interpreter 가 그 문법적인 오류를 지적해 줍니다.
그렇지 않으면 그 스크립트가 원만히 실행되어,
통상적으로 스크립트 에서 코딩된 일련의 형태의 문서가 화면에 나타나거나
아니면 아뭇것도 나타나지 않고 실행이 완료됩니다.
문법적인 오류가 있으면 그 오류가 생긴 line번호가 같이 표시됩니다.
만약 그 line이 손을 대어 수정한 부분이라면
그 줄을 다시 살펴 보아서 어떤 문법적인 오류가 있는 지 체크해 보십시오.

만약 문법적인 오류중에
Can't find string terminator "__END_POSTGUEST__"
anywhere before EOF at guestbook.cgi line 224 등과 같이
손을 대지 않은 부분인데도, can't find string treminator 에러가 난다면
UNIX의 아스키 파일이 아니기 때문에 일어날 수 있습 니다.
(이 에러는 아래 3번을 참조하십시오.)

2.위의 상태가 O.K 라면 그 다음에는 각 파일들의 퍼미션을 체크해 볼 필요가 있습니다.
(Windows NT 사용자는 물론 필요없습니다.)
특히 방명록의 경우에는 guestbook.html,
또 업로드(Ver1.1)의 경우에는 index.html 등이 반드시 읽기, 쓰기 권한이
주어진 666 으로 퍼미션이 주어져 있어야 합니다.
또한 대화방 설치시 일어나는 500 에러중에
각 대화방의 디렉토리의 퍼미션이 777로 주어지지 않은 경우도 많이 있었습니다.
게시판 설치시에도 반드시 퍼미션을 확인해 보아야 합니다.
그리고 다른 파일들의 퍼미션도 모두 readme.txt에 있는 것과 같은지
반드시 체크해 보십시오.
(이 퍼미션 때문에 500 에러가 나는 경우가 의외로 많습니다.)

3.위의 1, 2번이 완벽하지만 여전히 500에러가 나는 경우에는,

실행하고자 하는 cgi파일이 UNIX용 아스키 파일인지 확인해 보십시오.
(물론 이것은 windows NT을 사용하는 분들에게는 필요가 없습니다.)
이것을 확인하는 방법은 계정의 셀 상태에서 vi를 사용합니다.
예를 들어 방명록의 경우 guestbook.cgi가 있는 디렉토리에서
vi guestbook.cgi 합니다.
그렇게 해서 각 cgi파일을 vi에 로드했을 경우,
만약 UNIX용 CGI파일이 아닌 경우,
즉 PC용 아스키 파일인 경우 각 줄의 끝에 ^M이 붙어 있습 니다.
이런 경우에는 vi의 명령모드에서 :%s/^M//g 를 입력합니다.
(여기서 ^M은 ctrl+V 를 입력하고 그 다음 ctrl+M 으로 입력합니다.)
그렇게 하면 ^M이 모두 없어지게 됩니다. 이제 ZZ를 눌러 vi를 종료합니다.
vi의 사용이 귀찮고 어렵다면, 간단한 방법이 하나 있습니다.
분명 아스키 모드가 아니고, 바이너리모드로 업로드하여
유닉스용 아스키파일로 만들어지지 않은 경우, 계정의 쉘상태에서
perl -i -pe 's/