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