我有一个用 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 目录中来获取此处理程序。