CGI(公共網(wǎng)關(guān)接口)定義了Web服務(wù)器與外部內(nèi)容生成程序交互的方式,這些程序通常被稱為CGI程序或CGI腳本。這是一種使用您最熟悉的編程語言將動(dòng)態(tài)內(nèi)容放在網(wǎng)站上的簡單方法。
配置Apache以允許CGI
為了使CGI程序正常工作,需要配置Apache以允許CGI執(zhí)行。有幾種方法可以做到這一點(diǎn)。
方式1:ScriptAlias指令 ( 推薦學(xué)習(xí):Apache服務(wù)器 )
ScriptAlias指令告訴Apache,為CGI程序留出了一個(gè)特定的目錄。Apache將假定此目錄中的每個(gè)文件都是CGI程序,并在客戶端請(qǐng)求該特定資源時(shí)嘗試執(zhí)行該程序。
ScriptAlias指令如下所示:
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
如果在默認(rèn)位置安裝了Apache,則顯示的示例可在默認(rèn)httpd.conf配置文件找到。
ScriptAlias指令很像Alias指令,它定義了一個(gè)映射到特定目錄的URL前綴。Alias和ScriptAlias通常用于DocumentRoot目錄之外的目錄。
Alias和ScriptAlias之間的區(qū)別在于ScriptAlias具有額外的含義,即該URL前綴下的所有內(nèi)容都將被視為CGI程序。
因此,上面的示例告訴Apache,對(duì)于以/cgi-bin/開頭的資源的任何請(qǐng)求都應(yīng)該在目錄/usr/local/apache2/cgi-bin/中提供,并且應(yīng)該被視為CGI程序。
例如,如果請(qǐng)求URL http://www.example.com/cgi-bin/test.pl,Apache將嘗試執(zhí)行文件/usr/local/apache2/cgi-bin/test.pl并返回輸出。當(dāng)然,該文件必須存在,并且是可執(zhí)行的,并以特定方式返回輸出,否則Apache將返回錯(cuò)誤消息。
方式2:ScriptAlias目錄之外的CGI
出于安全原因,CGI程序通常僅限于ScriptAlias的目錄。通過這種方式,管理員可以嚴(yán)格控制允許誰使用CGI程序。但是,如果采取適當(dāng)?shù)陌踩A(yù)防措施,則沒有理由不能從任意目錄運(yùn)行CGI程序。
例如,您可能希望使用UserDir指令讓用戶在其主目錄中擁有Web內(nèi)容。如果他們想擁有自己的CGI程序,但無法訪問主cgi-bin目錄,則需要能夠在其他地方運(yùn)行CGI程序。
允許在任意目錄中執(zhí)行CGI有兩個(gè)步驟。首先,必須使用AddHandler或SetHandler指令激活cgi-script處理程序。其次,必須在Options指令中指定ExecCGI。
方式3:使用Options來允許CGI執(zhí)行
可以在主服務(wù)器配置文件中明確使用Options指令來指定在特定目錄中允許CGI執(zhí)行:
<Directory "/usr/local/apache2/htdocs/somedir"> Options +ExecCGI </Directory>
上述指令告訴Apache允許執(zhí)行CGI文件。還需要告訴服務(wù)器哪些文件是CGI文件。以下AddHandler指令告訴服務(wù)器將所有帶有cgi或pl擴(kuò)展名的文件視為CGI程序:
AddHandler cgi-script .cgi .pl
方式4:用戶目錄
要允許在用戶目錄中以.cgi結(jié)尾的任何文件執(zhí)行CGI程序,可以使用以下配置。
<Directory "/home/*/public_html"> Options +ExecCGI AddHandler cgi-script .cgi </Directory>
如果您希望指定用戶目錄的cgi-bin子目錄,其中所有內(nèi)容都將被視為CGI程序,則可以使用以下命令。
<Directory "/home/*/public_html/cgi-bin"> Options ExecCGI SetHandler cgi-script </Directory>