У меня есть c-скомпилированное приложение CGI, которое мне нужно запустить из DocumentRoot моего сервера Apache. Файл CGI называется index.cgi и расположен по адресу /usr/lib/cgi-bin/index.cgi.
У меня есть следующее определение каталога
<Directory "/usr/lib/cgi-bin/">
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AllowOverride None
Order allow,deny
Allow from all
DirectoryIndex index.cgi
</Directory>
У меня есть следующая настройка VirtualHost:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /usr/lib/cgi-bin
# ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
Если я перейду к 127.0.0.1 или 127.0.0.1/index.cgi, мне будет предложено загрузить файл index.cgi, однако если я включу ScriptAlias в блоке конфигурации vhost и перейду к 127.0.0.1/cgi-bin/index. cgi Я вижу результат работы моего CGI-приложения.
Первоначально я решил эту проблему с помощью mod_rewrite, однако, который работал в моей тестовой системе, целевой (встроенный) не имеет этого модуля, поэтому я ищу другой маршрут (снова).
Вам нужно указать обработчик cgi для файла, если вы не используете ScriptAlias
. В разделе каталога добавьте что-то вроде
AddHandler cgi-script .cgi
Это то, что документация говорит:
Любой файл, который имеет обработчик cgi-script, будет рассматриваться как сценарий CGI и запускаться сервером, а его выходные данные возвращаются клиенту. Файлы получают этот обработчик, либо имея имя, содержащее расширение, определенное директивой AddHandler, либо находясь в каталоге ScriptAlias.