Ошибка 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. Опечатка.
Если при обращении к скрипту Perl, расположенному в каталоге cgi-bin, возникает ошибка 500, необходимо проверить права доступа к этому скрипту. Права должны быть 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-type и только потом непосредственно то, что увидит пользователь (например, HTML-код). Пример строки для отображения заголовка обычного HTML-документа:
print "Content-type: text/html; charset=windows-1251\n\n";
Если после выдачи правильных заголовков ошибка 500 не исчезает, необходимо проверить корректность работы скрипта в целом. Для этого необходимо получить доступ к оболочке unix, а затем выполнить команду проверки синтаксиса:
> perl -cw script.pl
script.pl syntax OK
Если скрипт написан с ошибками, их необходимо исправить с помощью соответствующей диагностики, а синтаксис скрипта проверить еще раз.