特定のディレクトリで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スクリプトをディレクトリに配置します。

test.pl

#!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の許可

上記のようにCGIが実行されて結果が表示されています。

ちなみに同じディレクトリに「AddHandler」でCGIとして登録していない拡張子のファイルを置いた場合には、通常のファイルとしてファイルの中身が表示されます。下記は同じディレクトリにHTMLファイルを設置しブラウザで見た場合です。

特定のディレクトリでCGIの許可

「ScriptAlias」を設定したディレクトリの場合は、ディレクトリに含まれる全てのファイルがCGIとして扱われるのに対して、個別にCGIの許可を行った場合にはCGIのファイルと通常のファイルが混在することになります。

( Written by Tatsuo Ikura )