1

Topic: Отчего возникает ошибка 500 (Internal Server Error)?

Наиболее частой причиной ошибки 500 (Internal Server Error, внутренняя ошибка сервера) является неверный синтаксис файла .htaccess или наличие в нем неподдерживаемых директив. Чаще всего достаточно закомментировать директиву Options (для этого нужно поставить в начале строки решетку — #), и проблема исчезнет.

Ошибка 500 также может возникать вследствие неправильного обращения с CGI-скриптами:

CGI-скрипты должны иметь окончания строк в формате UNIX (\n), а не в формате Windows (\r\n). Для этого их надо загружать на сервер по FTP в режиме ASCII.

CGI-скрипты и папки, в которых они находятся, должны быть доступны для записи только владельцу, то есть иметь права 0755 (drwxr-xr-x).

В результате работы CGI-скрипта сформированны неправильные HTTP-заголовки ответа. В этом случае для решения проблемы полезно обратиться к error_log (его можно найти в контрольной панели в разделе « Статистика / Лог-файлы / Лог ошибок»).

2

Re: Отчего возникает ошибка 500 (Internal Server Error)?

Также из личного опыта, но это явление я объяснить не могу... Скрипты конкретно вываливаются и все тут. Десяти разовая проверка не дает результата. И тут приходит мысля о том, чтобы поменять местами участки считывания данных из stdin и вывод в stdout. Например, если Вы сначала считывали, то теперь просто сначала выведите "Content-type: ...\n\n", а потом считывайте. Незнаю почему, но иногда помогает. Объяснить ничем не могу, разве только тем, что Апач у меня в Линуксе старенький и видимо у него не все дома в этот момент...

При разработке скрипта на любом языке очень аккуратно подходите к динамической памяти. Неправильно инициализированная переменная приводит к невероятным результатам.

Теперь немного о том, что пишут на эту тему профессионалы (с моим фривольным разбавлением) :

Ошибка 500 может возникнуть от того, что Вы забыли о пустой строке между HTTP-заголовком и телом (но об этом я сказал).
Сервер хочет получить доступ к сценарию с правом чтения и выполнения, но не может. Лекарство: установите атрибуты на файл 555 или 755 (это для Unix систем).
Каталог, в котором находится сценарий также должен быть выполняемым, поэтому должен иметь режим 111, а лучше 755.
Серверу было сказано, что CGI программа должна быть с именем *.cgi, а сами дают что-то типа *.pl или *.exe. Лекарство сомнительное, но всеже проверьте настройки сервера. Также все сопутствующие .htaccess файлы.
Конфигурация сервера не позволяет скрипту использовать методы GET или POST. Иногда встречаются такие параноики админы PunBB_INFO_ICQ/smile Лекарство: топор от головной боли админу.
Также советуют сбрасывать буфера, или отключать буферизацию потока stdout. Лекарство: см. мануал по своему языку.

3

Re: Отчего возникает ошибка 500 (Internal Server Error)?

Также результатом этой ошибки может быть (а скорее всего и есть) неправильное окончание программы. Например, когда программа выполняется правильно после завершения она всегда дает знать системе, что она выполнилась на отлично, а в баллах системы на 0 PunBB_INFO_ICQ/smile После аварийного же завершения программы система не получает ответа равного 0, и поэтому это является прямым признаком ошибки.
В Линуксе есть другая проблема. Если Вы неправильно работаете с динамической памятью, то программа сразу же вываливается с сообщением:
   

Segmentation fault

А если присмотреться, то данная строка совсем не похожа на "Content-type:". Отсюда ошибка 500 о неправильном заголовке ответа.