在Apache上执行CGI脚本的问题

时间:2010-12-23 22:24:46

标签: apache2

这里几乎是一个完整的Linux / Apache新手,我正在将网站从共享主机迁移到Linode VPS。在我开始尝试移动使用一系列CGI脚本运行的Moveable Type博客之前,这一切都进展顺利。我正在运行Ubuntu 10.04和Apache2。经过几个小时的搞乱,我得到了一个PERL hello world脚本(hello.cgi),可以从根HTML目录中的Web浏览器执行。这是脚本:

#!/usr/bin/perl -w
use strict;
print "Content-Type: text/html\n\nHello world!";

我通过将以下内容添加到/etc/apache2/sites-available/mysitename.com文件中来实现此目的。

<Directory /srv/www/mysitename.com/public_html/>
    Options +ExecCGI
    AddHandler cgi-script .cgi
</Directory>

但是我想在/srv/www/mysitename.com/public_html/mt/目录中执行CGI脚本,所以我将上面条目中的目录更改为该路径,当我查看该文件夹中的hello world脚本时通过浏览器,我看到了hello.cgi脚本的源代码而不是输出。显然有些事情是不对的。我花了足够的时间尝试自己解决这个问题,现在是时候寻求帮助了。那么,有人有任何建议吗?请保持简单的答案我真的只是学习在这里汲取Linux / Apache2的明智之处!

找到解决方案:

<VirtualHost *:80>
  ServerName www.sitename.com
  ServerAdmin general@sitename.com
  ServerAlias sitename.com
  DocumentRoot /srv/www/mysitename.com/public_html/
  ErrorLog /srv/www/mysitename.com/logs/error.log
  CustomLog /srv/www/mysitename.com/logs/access.log combined
  AddHandler cgi-script .cgi .pl
</VirtualHost>

<Directory /srv/www/mysitename.com/public_html/>
    AllowOverride All
    Order allow,deny
    Allow from all
    Options All +SymLinksIfOwnerMatch +FollowSymLinks +ExecCGI -Indexes -MultiViews
</Directory>

<Directory /srv/www/mysitename.com/public_html/mt/>
    AllowOverride All
    Order allow,deny
    Allow from all
    Options All +SymLinksIfOwnerMatch +FollowSymLinks +ExecCGI -Indexes -MultiViews
</Directory>

1 个答案:

答案 0 :(得分:3)

你添加了mod-perl吗?

添加这些行

AddType perl-script .pl
AddHandler perl-script .htm

指定DirectoryIndex

(目录块之外)

你也在使用虚拟主机吗?我通常不会按照你说实话的方式做事。