配置Apache来处理CGI请求,包括告诉Apache将CGI程序放在什么地方、为特定的文件扩展名设定CGI句柄、以及说明将哪些文件扩展名视为CGI程序。建议将CGI程序存储于一个目录下,以便对其进行更好的控制。最好将CGI程序目录放在你的DocumentRoot目录外面。这样就不可能对CGI程序直接访问,也就保证了你的站点具有更好的安全性。
一般情况下,CGI脚本文件都放入/home/httpd/cgi-bin目录中,需要使用CGI程序的html文档通过“/cgi-bin”来指定要调用的CGI程序。但如果要使脚本文件与相关的html文档在一起,则可以用ScriptAlias指令来指定新的脚本目录。
例如,html文件在目录/myhome/httpd/html中,CGI脚本在 /myhome/httpd/cgi-bin 中,使用命令:
ScriptAlias /mycgi/ /myhome/httd/cgi-bin
可以在任何html文件中,当需要使用/myhome/httpd/cgi-bin中的程序时,如abc.pl,就可以使用“/mycgi/abc.pl”来调用。
在由ScriptAlias
指定的目录中,Apache认为所有的文件都是用于执行,而不做一般文件处理。在这样的目录中,文件的名字不必具有如“.php”、“.pl”等可执行文件的后缀。但如果想要在ScriptAlias指定的目录之外执行这些程序,必须在Apache的配置文件中对执行程序的文件名后缀使用AddHandler进行说明,例如:
AddHandler cgi-script .php .pl
这样,Apache将把以“.php”、“.pl”为后缀的文件当作CGI脚本来运行。
为了使某个目录中以“.cgi”为后缀的文件能够执行,在Apache的配置文件中的相应目录下(由定义)的Options 中要包含ExecCGI选项。
有些时候,不希望目录中的所有“.cgi”文件都能被执行。例如,只让abc.cgi能执行,则可以使用模块mod_rewrite提供的功能,即在包含该文件的目录中,如htdocs/mydir加入“.htaccess”文件,文件内容如下:
RewriteEngine on
RewriteBase /mydir
RewriteRule ^abc.cgi\.cgi$-[T=application/x-httpd-cgi]
即把abc.cgi文件重写成具有CGI MIME类型的文件,从而能被服务器执行。
注意要在Apache的配置文件中将该目录的AllowOverride包含FileInfo,以便使在“.htaccess”文件中mod_rewrite模块的指令能够有效。