Perlに関するApacheの設定
Apacheの設定ファイルである「http.confファイル」の中でPerlの利用に関する部分について確認していきます。「http.conf」ファイルは「(XAMPPインストールディレクトリ)¥apache¥conf¥」に含まれています。
「http.conf」ファイルをテキストエディタで開いて下さい。
209行目からを見てください。
<Directory "D:/xampp/htdocs">
Options FollowSymLinks Includes ExecCGI
</Directory>
「D:/xampp/htdocs」はApacheのドキュメントルートです。ここではドキュメントルート以下のディレクトリに対して「ExecCGI」を設定していますのでどこでもCGIが実行できるようになっています。
425行目を見てください。
AddHandler cgi-script .cgi
「ExecCGI」が許可されたディレクトリの中で、どのような拡張子のファイルがCGIのファイルなのかを指定します。ここでは拡張子が「.cgi」のファイルをCGIとして指定しています。209行目の設定と合わせて、ドキュメントルート以下のファイルの中で拡張子が「.cgi」のファイルはcgi-script ハンドラで処理されます(CGIとして実行されます)。
少し前に戻って328行目を見てください。
ScriptAlias /cgi-bin/ "D:/xampp/cgi-bin/"
ScriptAcliasによって「/cgi-bin/」が「D:¥xampp¥cgi-bin¥」にマッピングされると同時にこのディレクトリでのCGIの実行が許可されます。なおマッピングとは「http://localhost/cgi-bin/test.cgi」とアクセスがあった場合に「D:¥xampp¥cgi-bin¥test.cgi」を実行するという意味です。このディレクトリ内にあるファイルはmod_cgiのcgi-script ハンドラで処理されます(つまり拡張子に関係なくCGIとして処理されます)。
336行目からを見てください。
<Directory "D:/xampp/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
先ほどScriptAcliasによってマッピングの対象となった「D:¥xampp¥cgi-bin¥」に対しての設定です。
まず「AllowOverride None」によってこのディレクトリに含まれるサブディレクトリでは設定変更できなくしています。「Options None」で特別な機能は全て無効となります(ただしScriptAcliasによって指定されていますのでCGIは実行できます)。そして「Order allow,deny」と「Allow from all」で全てのアクセスを許可しています。
mod_perlに関する設定
529行目を見てください。
Include conf/extra/perl.conf
XAMPPのPerlアドオンをインストールするとこの行が追加されます。Perlに関する追加の設定が書かれた「perl.conf」ファイルが読み込まれます。「perl.conf」ファイルは「(XAMPPインストールディレクトリ)¥apache¥conf¥extra¥」に含まれています。
なお同じディレクトリに「startup.pl」がありますが、こちらはmod_perlを有効にするための起動ファイルで「perl.conf」の中で読み込まれています。
では「perl.conf」の内容を見てみます。
Alias /perl "D:/xampp/htdocs/modperl/" <Directory "D:/xampp/htdocs/modperl/"> SetHandler perl-script PerlResponseHandler ModPerl::Registry Options +ExecCGI PerlOptions +ParseHeaders </Directory> <Files *.pl> SetHandler perl-script PerlResponseHandler ModPerl::Registry Options +ExecCGI PerlOptions +ParseHeaders </Files> PerlModule Apache::ASP Alias /asp "D:/xampp/htdocs/modperlasp/" <Directory "D:/xampp/htdocs/modperlasp/"> SetHandler perl-script PerlResponseHandler Apache::ASP PerlSetVar Global . PerlSetVar StateDir "D:/xampp/tmp" </Directory>
mod_perlに関する設定のようなのですが、現時点でそれほど理解していません。(ディレクトリに関係無く)拡張子が「.pl」のファイル、また拡張子に関係無く「D:¥xampp¥htdocs¥modperl¥」と「D:¥xampp¥htdocs¥modperlasp¥」ディレクトリに対してmod_perlのperl-scriptハンドラを使って処理されるように設定がされているようです。
またマッピングが設定されており「http://localhost/perl/test.pl」とアクセスがあった場合に「D:¥xampp¥htdocs¥modperl¥test.pl」を実行し、「http://localhost/asp/test.pl」とアクセスがあった場合に「D:¥xampp¥htdocs¥modperlasp¥test.pl」を実行します。
まとめ
以上のことをまとめると次の通りです。
・ディレクトリに関係なく拡張子が「.pl」のものはperl-scriptハンドラを使って処理される ・D:¥xampp¥htdocs¥modperl¥ と D:¥xampp¥htdocs¥modperlasp¥ 以下のファイルは拡張子に関係 なくperl-scriptハンドラを使って処理される ・D:¥xampp¥cgi-bin¥ 以下のファイルは「.pl」を除き拡張子に関係なくcgi-scriptハンドラで処理 される ・上記ディレクトリ以外の場所では拡張子が「.cgi」のものはcgi-scriptハンドラを使って処理される
( Written by T.buzz.Ikura+ )