在Ubuntu中执行.cgi文件

时间:2011-02-22 19:38:03

标签: perl ubuntu apache2 cgi

我在Ubuntu下运行Apache / PHP

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

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

4 个答案:

答案 0 :(得分:13)

将这些行添加到apache2.conf文件

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

AddHandler cgi-script .cgi .pl

答案 1 :(得分:2)

显然,CGI执行没有正确设置。你试过tutorial吗?

通常,所有CGI脚本都会放入某个位置,例如cgi-bin。只执行该文件夹中存在的文件。否则,它们被视为普通文件,Web服务器只是将它们作为源返回。

tutorial向您展示了可用于使脚本执行的替代方法,而不仅仅是作为文本文件返回。

答案 2 :(得分: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”;   打印“Hello,World。”;

所以这里的shebang线是#!/usr/bin/perl

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

例如,当我安装Perl时,会自动建议我在C:\Program Files (x86)\Perl64中安装Perl 在我的Perl64文件夹里面是名为'bin'的文件夹,里面是perl.exe

所以我不得不将shebang线改为:#!C:/Program Files (x86)/Perl64/bin/perl.exe 在我得到cgi脚本与Apache合作之前。

答案 3 :(得分:0)

这让我厌倦了亚马逊Ubuntu 14.04。我的配置已经“工作”了几年:

sudo a2enmod cgi
sudo service apache2 restart

对一些扩展名为.cgi且现有虚拟主机配置的现有Perl脚本进行排序。也错了[不是这个问题,但与此升级有关]:

virtual.host

需要成为

virtual.host.conf

在被认定为有效之前。