http://foertsch.name/ModPerl-Tricks/custom-content_type-with-custom_response.shtml
したがって、エラー テキストを custom_response に直接渡す代わりに、それを pnotes に保存し、それ以外の場合は未使用の URI、たとえば ///error を custom_response として設定します。
sub handler {
my ($r)=@_;
@{$r->pnotes}{qw/etext ect/}=("sorry, no access\n", 'text/plain; charset=my-characters');
$r->custom_response( 403, "/-/error" );
return 403;
}
ここで、Perl ハンドラーを実行するように ///error を構成する必要があります。
<Location /-/error>
SetHandler modperl
PerlResponseHandler My::Error
</Location>
そしてもちろん、ハンドラー関数 My::Error::handler: が必要です。
sub handler {
my ($r)=@_;
return Apache2::Const::NOT_FOUND unless $r->prev;
$r->content_type($r->prev->pnotes->{ect});
$r->print($r->prev->pnotes->{etext});
return Apache2::Const::OK;
}
この解決策は機能しているようですが、主な質問からの答えはまだわかりません:なぜリクエストが終了していないのですか?
UPD
それは mod_perl2 のバグのようです
https://bz.apache.org/bugzilla/show_bug.cgi?id=57976