Ошибка 500 «Внутренняя ошибка сервера» возникает, когда сценарий, который вы разместили на сервере, не может быть запущен, когда в сценарии есть ошибки или когда в файл .htaccess помещена неверная инструкция. Этот список причин ошибки 500 не является исчерпывающим; Есть еще много причин, по которым может возникнуть ошибка 500. Однако три упомянутых случая являются наиболее распространенными.

Давайте сначала рассмотрим случай, когда вы поместили неправильную инструкцию в файл .htaccess. Если вы допустили ошибку в написании названия необходимой директивы или ее параметров, то в файле error.log вы обнаружите примерно следующую ошибку:

[Wed Apr 14 17:01:38 2004] [alert] [client 217.16.16.16]

/home/uXXXXX/aaa.ru/www/.htaccess:Invalid command 'DrectoryIndex',

perhaps mis-spelled or defined bya module not included in the server

configuration

 

Веб-сервер сообщит вам, какую конкретную директиву он считает ошибочной и ее необходимо исправить. В этом случае веб-сервер сообщил, что ему не известна директива DrectoryIndex. И действительно, директивы DrectoryIndex нет, есть DirectoryIndex. Есть опечатка.

Если ошибка 500 возникает при доступе к Perl-скрипту, расположенному в каталоге cgi-bin, необходимо проверить права доступа к этому скрипту. Разрешения должны быть 755 (rwxrx-rx). Если это не так, нужно изменить права на 755 с помощью команды chmod 755 script.pl в оболочке unix или использовать для этого FTP. Отдельно стоит отметить, что разрешения для скриптов должны быть установлены строго 755.

Пожалуйста, проверьте, использовали ли вы правильный режим передачи файлов по FTP при загрузке скрипта на наш сервер. Все скрипты, как и любые другие текстовые файлы, необходимо передавать по FTP в текстовом (ASCII) режиме. Если использовался режим передачи двоичных файлов, то скрипты, скорее всего, не будут работать.

Если после проверки правильности установленных прав на файл сценария ошибка не исчезла, необходимо просмотреть последние записи в файле error.log — в него веб-сервер помещает все сообщения об ошибках. Итак, вы найдете строку типа

[Fri Apr  9 15:05:31 2004] [error][client 217.16.16.16] Premature end of

script headers: /home/uXXXX/aaa.ru/cgi-bin/script.pl

 

Первое, что вам нужно сделать при получении такой ошибки, — это проверить, правильно ли скрипт выдает HTTP-заголовки. Каждый скрипт должен сначала напечатать строку с указанием соответствующего Content-типа и только потом непосредственно то, что увидит пользователь (например, HTML-код). Пример строки для отображения заголовка обычного HTML-документа:

print "Content-type: text/html; charset=windows-1251\n\n";

 

Если после выдачи правильных заголовков ошибка 500 не пропадает, нужно проверить корректность работы скрипта в целом. Для этого вам необходимо получить доступ к оболочке unix, а затем запустить команду проверки синтаксиса:

> perl -cw script.pl

script.pl syntax OK

 

Если скрипт написан с ошибками, их необходимо исправить с помощью соответствующей диагностики и еще раз проверить синтаксис скрипта.