apache配置虚拟主机运行PERL脚本的问题

apache配置虚拟主机运行PERL脚本的问题

我在APACHE中配置了基于IP的虚拟主机,希望通过输入IP地址就能访问PERL CGI,而不必输入一长串IP/cgi-bin/dir/index.pl来访问.但当我配好后打开网页访问时,网页上将我程序的代码都显示出来了, #/usr/bin/perl use strict; use warnings;....等等.

我的虚拟主机配置块是:
<VirtualHost 10.0.0.147:80>
        DocumentRoot /usr/local/apache2/cgi-bin/dir
        ServerName www.dir.com.cn
        ErrorLog logs/dir-error_log
        CustomLog logs/dir-access_log common
</VirtualHost>

其他地方没修改,请问是哪儿的问题?请各位赐教!!
Apache没有被正确配置以执行CGI程序
要让CGI程序能正常运作,必须配置Apache以允许CGI的执行,其方法有多种。

ScriptAlias
ScriptAlias指令使Apache允许执行一个特定目录中的CGI程序。当客户端请求此特定目录中的资源时,Apache假定其中文件都是CGI程序并试图运行。

ScriptAlias指令形如:

ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/

如果Apache被安装到默认的位置,默认的配置文件httpd.conf中则会有上述配置。ScriptAlias指令定义了映射到一个特定目录的URL前缀,与Alias指令非常相似,两者一般都用于指定位于DocumentRoot目录以外的目录,其区别是ScriptAlias又多了一层含义,即其URL前缀中任何文件都被视为CGI程序。所以,上述例子会指示Apache,/cgi-bin/应该指向/usr/local/apache/cgi-bin/目录,且视之为CGI程序。

举例,如果有URL为http://www.example.com/cgi-bin/test.pl的请求,Apache会试图执行/usr/local/apache/cgi-bin/test.pl文件并返回其输出。当然,这个文件必须存在而且可执行,并以特定的方法产生输出,否则Apache返回一个出错消息。

ScriptAlias目录以外的CGI
由于安全原因,CGI程序通常被限制在ScriptAlias指定的目录中,如此,管理员就可以严格地控制谁可以使用CGI程序。但是,如果采取了恰当的安全方法措施,则没有理由不允许其他目录中的CGI程序运行。比如,你可能希望用户在UserDir指定的宿主目录中存放页面,而他们有自己的CGI程序,但无权存取cgi-bin目录,这样,就产生了运行其他目录中CGI程序的需求。

用Options显式地允许CGI的执行
可以在主服务器配置文件中,使用Options指令显式地允许特定目录中CGI的执行:

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

上述指令使Apache允许CGI文件的执行。另外,还必须告诉服务器哪些文件是CGI文件。下面的AddHandler指令告诉服务器所有带有cgi或pl后缀的文件是CGI程序:

AddHandler cgi-script cgi pl

.htaccess文件
.htaccess文件是针对目录进行配置的一种方法。Apache在提供一个资源时,会在此资源所在目录中寻找.htaccess文件,如果有,则使其中的指令生效。AllowOverride 指令决定了.htaccess文件是否有效,它指定了哪些指令可以出现在其中,或者根本不允许使用。为此,需要在主服务器配置中如此配置:

AllowOverride Options

在.htaccess文件中,需要如此配置:

Options +ExecCGI

以使Apache允许此目录中CGI程序的执行。
谢谢二位,问题已解决.再上<Directory> 和AddHandler就可以了!!!