Назад | Перейти на главную страницу

Apache: установка DocumentRoot в каталог cgi приводит к загрузке файла вместо его выполнения

У меня есть 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.