在Ubuntu中执行一个.cgi文件

5

我正在Ubuntu下运行Apache/PHP。

当我通过访问http://localhost/mycgi.cgi来运行 .cgi 文件时,浏览器会显示代码而不是运行它。

我该如何让浏览器执行CGI文件而不是显示其内容?


2
投票迁移到 http://askubuntu.com/。 - daxim
2
@daxim:我不认为这真的是一个Ubuntu特定的问题。问题已经正确地放在这里了。 - eckes
4个回答

13

将以下这些行添加到您的apache2.conf文件中

<Directory /usr/local/apache2/htdocs/somedir>
    Options +ExecCGI
</Directory>

AddHandler cgi-script .cgi .pl

当在虚拟主机上使用时,您需要在<VirtualHost>标记内的<Directory>标记中指定此选项,"Options +ExecCGI"单独在<VirtualHost>上没有效果。 - Radu Maris

2
显然,CGI执行未正确设置。你尝试过教程了吗?
通常,所有的CGI脚本都被放置在一个特定的位置,如cgi-bin文件夹中。只有该文件夹中存在的文件才会被执行。否则,它们将被视为普通文件,Web服务器仅会将其作为源代码返回。 教程向您展示了可以使用的替代方法,以使脚本被执行而不仅仅是作为文本文件返回。

我在usr/www/mywww/cgi-bin中创建了一个cgi-bin,这是你所指的吗? 如果不是,我应该把它放在哪里? - X10nD
@Jean:仅仅创建一个 cgi-bin 目录是不够的。自己做个好事,去读一下教程吧。他们在那里解释得非常清楚。 - eckes
1
那个教程在我看来很糟糕。例如:“ScriptAlias指令看起来像这样: ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/ 这个例子是从你的默认httpd.conf配置文件中提取的,如果你在默认位置安装了Apache”,但这对我来说并不正确。 - Literat

1

确保您的 .cgi 或 .pl 文件中的 shebang 行是正确的。Shebang 行告诉 Apache Perl 解释器的位置(Perl 解释器是 perl.exe 文件)。

Apache 教程如下:

你的第一个 CGI 程序 以下是一个打印一行到浏览器的示例 CGI 程序。输入以下内容,将其保存为名为 first.pl 的文件,并将其放在您的 cgi-bin 目录中。 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World.";

因此,这里的 shebang 行是 #!/usr/bin/perl

然而,如果 perl.exe 位于不同的文件夹中,则需要更改 #!/usr/bin/perl!即使是 Windows 用户,通常也可以完全忽略和省略 shebang 行。 (为什么教程没有提到这一点,我不知道 - 我猜他们没有意识到有些人总是忽略 shebang 行?)

例如,当我安装 Perl 时,自动建议我将 Perl 安装在 C:\Program Files (x86)\Perl64 中,在我的 Perl64 文件夹中有一个名为“bin”的文件夹,里面有 perl.exe。

所以我不得不将shebang行更改为:#!C:/Program Files (x86)/Perl64/bin/perl.exe,然后才能让Apache与cgi脚本一起工作。


0

这个问题困扰了我在亚马逊Ubuntu 14.04上。我有一个配置已经“工作”了几年:

sudo a2enmod cgi
sudo service apache2 restart

我已经解决了一些现有的扩展名为.cgi的Perl脚本和现有虚拟主机配置的问题。还有一个错误(与此升级相关,但不是这个问题):

virtual.host

需要成为

virtual.host.conf

在它被认为是有效的之前。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接