1. 通用网关接口 CGI简介
通用网关接口 CGI是一个信息服务器主机对外信息服务的标准接口。 CGI接收用户的要求,然后让服务器完成请求,并将执行结果返回给用户。
CGI接口是为了提供在超文本 HTML的文件编写时,可以结合其他外部的程序语言,让使用者通过浏览器将使用者的数据输入到文件里,然后经服务器转呈现于其他用户来观赏或记录至服务器主机上的数据库里。
CGI可以通过 CC++PerlShell脚本语言、 Jave来实现。后面的一些具体技术从某种意义上来说也是一种 CGI程序。
2. 配置Apache支持CGI
如何使 Apache能处理 CGI请求?必须通过相应的配置过程告知 Apache在哪里存储 CGI程序,指明CGI程序的扩展等,以下我们逐一介绍设置的内容与步骤。
(1) 创建存储 CGI程序的目录
创建集中的 CGI程序目录只是建立 CGI环境的开始。如果要考虑提高安全性,应将集中的
CGI程序目录保存在 DocumnentRoot目录外,使访问者不能直接访问 CGI程序。
1) DocumentRoot目录外创建一个目录,然后将所有的 CGI程序都集中存放在这个目录下。
例如,可创建一个 /home/httpd/public/apps的目录作为 CGI程序的大本营。
2) CGI程序目录创建别名,也就是编辑配置文件 httpd.conf,加入:

ScriptAlias  /cgi-bin/  /home/httpd/public/apps

之后,当客户访问 www.xxx.com/cgi-bin/li.cgi时, WEB服务器会自动执行 WEB服务器上的/home/httpd/public/apps/li.cgi文件。
3) CGI目录设置合适的权限,一般是只允许 Apache有读取和执行的权限但没有写的权限。
(2) 允许用户访问 cgi-bin
如果用户需要使他的主页更具有活力,往往会向你申请 cgi-bin访问服务。下面介绍 Apache服务器为用户提供的两种 cgi-bin访问方法。
a) 使用DirectoryDirectoryMatch容器
当在配置文件 srm.conf中使用 UserDir命令定义一个目录时, Apache会把该目录作为用户WWW站点的顶层目录。例如:
UserDir  Public_html

Apache接到www.xxx.com/~user的请求,就到 /home/user/Public_html取出主页发送给客户。如果要为每个用户添加 CGI支持,就在 Apache的配置文件 access.conf中添加下列配置:
<DirectoryMatch "/home/[a-z]+/public_html/cgi-bin">
Options ExecCGI
AddHandler cgi-script .cgi .pl
</DirectoryMatch>
注意 将DirectoryMatch换成Directory亦可
在这种方法中, Apache服务器将 www.xxx.com/~user/cgi-bin请求翻译成为了 /home/user/  Public_html/cgi-bin/,并允许执行任何带有正确扩展名 (.cgi.pl)CGI程序。
b. 使用ScriptAliasMatch命令
通过使用 ScriptAliasMatch命令,可以为每个用户添加 CGI支持。例如:
ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/public_html/cgi-bin/$2
这个命令将用户名与 $1相匹配,其中 $1~([a-z]+)相等。将 /cgi-bin/后面的任何内容与 $2匹配,其中 $2(.*)相等。
这个设置也实现了将 www.xxx.com/~user/cgi-bin/xxx.cgi请求解释为:
/home/user/Public_html/cgi-bin/xxx.cgi
大家想一想,如果想将这个请求解释为:
/home/httpd/public/apps/xxx.cgi
该如何设置呢?对,应该是:
ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/httpd/public /apps/$2