Надо отредактировать конфигурационные файлы (я рассчитываю, что у вас default
конфиги apache)
(NB: Apache/1.3.6 и выше по умолчанию конфигурируется только файлом httpd.conf.
Директивы все остались прежние, просто их слили в один файл)
(если пригляделся, там нужно только раскоментировать опции)
Это позволит вам помещать программы в каталог
/usr/local/apache/cgi-bin/ и они будут видны по URL
http://you/cgi-bin/program_name
Способ 2
Добавить в srm.conf директиву AddHandler cgi-script .cgi
и вы сможете вызывать cgi-программу из любого каталога. Но она должна иметь
окончание .cgi и для нее должно быть разрешено исполнение CGI
(Options ExecCGI в access.conf, написано выше).
Оба способа можно без проблем использовать совместно.
Вы запустили скрипт с командной строки (не через CGI!!!) и он работает, а
не говорит "compilation stopped due to errors"
Скрипт не только работает, но и выдает нужный заголовок с пустой строкой
после него
Для многопользовательских систем) Вы сделали тоже под пользователем, под
которым работает сервер (su -m имя_пользователя -c script в Unix) и он столь же
благополучно работает
error_log для того и служит, чтобы туда смотреть :-)
Ошибка 403 "Forbidden"
Возникает, если сервер не может отдать вам содержимое по причине отсутствия
полномочий.
Проверьте:
Может ли user (для apache под Unix это обычно nobody), под которым работает, сервер исполнять файл?
В частности, может ли сервер исполнять интерпретатор (в случае
скриптовых языков)?
Можно ли для этого каталога исполнять программы CGI? (Options ExecCGI для
apache)
Ошибка 500 "Internal Server Error"
Возникает в случае внутренней ошибки.
Проверьте:
Выводите ли вы строку "Content-Type:"?
Правильно ли вы ее выводите? (Content-type, Content_Type --
неправильно)
Заканчиваете ли вы хедеры пустой строкой? Нельзя написать
print "Content-Type: text/html\n";
print "<HTML>\n";
Надо писать:
print "Content-Type: text/html\n\n"; # Два "\n"
print "<HTML>\n";
Также, эта ошибка возникает, если CGI-программа завершилась с ненулевым
кодом возврата, что часто встречается в случае некомпилируемости вашего
скрипта perl'ом.
Совет: делайте
use CGI::Carp qw(fatalsToBrowser)
во время отладки, тогда вам выдадут сообщение об ошибке perl.
apache устанавливает переменную окружения REMOTE_HOST, если ему
разрешено проводить dns запросы для определения имени. Для 1.3.x
по-умолчанию это выключено. Включается/выключается директивой
HostNameLookups, которая может принимать 3 значения: on -- проводить
запросы, off -- не запрашивать dns и double -- делать двойные запросы:
запрашивать имя хоста, а затем по имени запрашивать ip адрес, для
безопасности.