特定のディレクトリでCGIを実行する(Option, AddHandler)
「ScriptAlias」で指定したディレクトリ以外にもドキュメントルート以下の特定のディレクトリでCGIを利用できるように設定することは可能です。
CGIの実行を許可するにはディレクトリに対してCGIの実行を許可する必要があります。「Option」に対して「ExecCGI」を追加します。
Option ExecCGI
「Option」はディレクトリに対して様々な設定を与えます。「Option ExecCGI」と設定するとCGIの実行だけが許可され、それ以外の設定が無効となります。既存の設定を変更せずにCGIの実行の許可だけを追加する場合には次のように「+」を付けて記述して下さい。
次にディレクトリに含まれるどのような拡張子のファイルがCGIのファイルなのかを指定します。「AddHandler」を使って指定します。
AddHandler cgi-script 拡張子1 拡張子2 ...
例えば「.pl」や「.cgi」が付いたファイルに対してリクエストがあった場合には、ファイルの中身を表示するのではなくCGIとして実行した結果を返すようにするには次のように記述します。
AddHandler cgi-script .pl .cgi
サンプルの実行
それでは、ドキュメントルート内の「private¥cgi-bin」ディレクトリの中で「.pl」の拡張子を持つファイルがCGIとして実行できるように許可してみます。
<Directory "D:/Apache Group/Apache2.2/htdocs/private/cgi-bin"> Options +ExecCGI AddHandler cgi-script .pl .cgi </Directory>
上記を「httpd.conf」に追加で記述して下さい。そして下記の簡単なPerlスクリプトをディレクトリに配置します。
#!d:/Perl/bin/perl.exe print "Content-type: text/html;¥n¥n"; print "<html><body><h1>test cgi</h1></body></html>¥n";
それではブラウザで「http://localhost/private/cgi-bin/test.pl」を見てください。
上記のようにCGIが実行されて結果が表示されています。
ちなみに同じディレクトリに「AddHandler」でCGIとして登録していない拡張子のファイルを置いた場合には、通常のファイルとしてファイルの中身が表示されます。下記は同じディレクトリにHTMLファイルを設置しブラウザで見た場合です。
「ScriptAlias」を設定したディレクトリの場合は、ディレクトリに含まれる全てのファイルがCGIとして扱われるのに対して、個別にCGIの許可を行った場合にはCGIのファイルと通常のファイルが混在することになります。
( Written by Tatsuo Ikura )