これは、現在のApache / ModperlサイトをStarmanに転送しようとしているため、ファイル拡張子ごとに異なるハンドラーを使用してapp.psgiをビルドする必要があります。Apacheのようなもの:
<LocationMatch "(\.m|\.mh|\/)$">
SetHandler perl-script
PerlHandler MyApp::Mhandler
</LocationMatch>
<LocationMatch "(\.p|\.ph)$">
SetHandler perl-script
PerlHandler MyApp::Phandler
</LocationMatch>
今私が持っています:
#app for handle .m and .mh
my $Mapp = Some::PSGI->handler( sub {
...
});
#app for handling .p and .ph
my $Papp = SomeOther::PSGI->handler( sub {
...
});
しかし、ビルダーの使い方は?
builder {
#any extension what is not .m .mh .p .ph - handle as static
#but, only when the request have any extension
enable "Plack::Middleware::Static",
path => __what here__, ???
root => "/my/doc/root";
#and what here to achieve the following "rules".
#??? $Papp
#default $Mapp
};
必要な「ルール」:
- リクエストに拡張子がない場合、またはリクエストが「/」で終わる場合
- で処理する必要があります
$Mapp
- で処理する必要があります
- リクエストが何らかの拡張子で終了する場合は、
.m
.mh
によって処理する必要があります$Mapp
.p
.ph
によって処理する必要があります$Papp
- 拡張子が付いた他のすべてのファイル(.css .js .pdf .jpg ...など)は静的として処理する必要があります。
もちろん、すべての静的ファイルをツリーに配置する方がはるかに簡単ですが、現在のアプリが提供されているので、後でリファクタリングしてStartmanに移動するだけです。