Преобразование конфигурации Modperl в Plack — запуск разных обработчиков по расширению файла

Это я пытаюсь перенести мой текущий сайт Apache/Modperl в Starman, и мне нужно собрать app.psgi с разными обработчиками для разных расширений файлов. Что-то вроде в апаче:

<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, рефакторинг - позже.

6
задан kobame 24 June 2012 в 10:44
поделиться