前回の続き。
とりあえず、mod_perl2のハンドラは何があるのか調べる。
- PerlPostReadRequestHandler (PerlInitHandler)
- PerlTransHandler
- PerlMapToStorageHandler
- PerlHeaderParserHandler (PerlInitHandler)
- PerlAccessHandler
- PerlAuthenHandler
- PerlAuthzHandler
- PerlTypeHandler
- PerlFixupHandler
- PerlResponseHandler
- PerlLogHandler
- PerlCleanupHandler
という感じらしい。番号は呼ばれる順番ね。ふむふむ。
じゃぁ本当にそんな順番で呼ばれるのか確かめてみよう。
httpd.confに以下のように記述。
PerlSwitches -I/usr/local/apache2/site_perl
PerlPostReadRequestHandler Apache::PostReadRequest
PerlTransHandler Apache::Trans
PerlMapToStorageHandler Apache::MapToStorage
PerlHeaderParserHandler Apache::HeaderParser
PerlInitHandler Apache::Init
PerlAccessHandler Apache::Access
PerlAuthenHandler Apache::Authen
PerlAuthzHandler Apache::Authz
PerlTypeHandler Apache::Type
PerlFixupHandler Apache::Fixup
PerlResponseHandler Apache::Response
PerlLogHandler Apache::Log
PerlCleanupHandler Apache::Cleanup
で、/usr/local/apache2/site_perl/Apache/PostReadRequest.pmを以下のように。
package Apache::PostReadRequest;
use strict;
use Apache2::Const -compile => qw(OK DECLINED);
sub handler {
warn __PACKAGE__;
return Apache2::Const::DECLINED;
}
1;
Apache2::Const::DECLINEDを指定しているのは次のハンドラにまわすため。
他のpmファイルも同様にしてApacheの再起動してアクセスすると、エラーログには
Apache::PostReadRequest
Apache::Init
Apache::Trans
Apache::MapToStorage
Apache::HeaderParser
Apache::Access
Apache::Type
Apache::Fixup
Apache::Log
Apache::Cleanup
という順番でモジュール名が残されていました。
BASIC認証書けてないからAuthenとAuthzが無いのは問題ないとして、Apache::Responseが表示されないのはなぜだろう。よくわかんね。
とりあえず、順番は確かめられたので、次はリファラ次第で処理を分けるようにしてみる。
これってPerlTransHandlerかな。
コメント