Apache:将 DocumentRoot 设置为 cgi 目录会导致下载文件而不是执行它

Apache:将 DocumentRoot 设置为 cgi 目录会导致下载文件而不是执行它

我有一个用 C 语言编写的 CGI 应用程序,需要从 Apache 服务器的 DocumentRoot 执行。该 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 文件,但是如果我在 vhost 配置块中启用 ScriptAlias 并转到 127.0.0.1/cgi-bin/index.cgi,我会看到我的 CGI 应用程序的输出。

我最初使用 mod_rewrite 解决了这个问题,但是在我的测试系统上,目标(嵌入式)没有可用的模块,所以我正在(再次)寻找另一种方法。

答案1

如果你不使用,你需要为文件指定 cgi 处理程序ScriptAlias。在目录部分,添加类​​似

AddHandler cgi-script .cgi

这就是文档说:

任何具有处理程序 cgi-script 的文件都将被视为 CGI 脚本,并由服务器运行,其输出将返回到客户端。文件通过具有包含 AddHandler 指令定义的扩展名的名称或位于 ScriptAlias 目录中来获取此处理程序。

相关内容