通过正则表达式挂载 PSGI 应用程序 - 不同的路径 - >一个应用程序



寻找一种方法,如何运行相同的 PSGI $app,以供多个请求运行 mount prefix所定义的多个请求。如何在这样的screnario中 mount?例如。假设我有app.psgi

use Plack::Builder;
my $defaultapp = sub { ... };
my $someapp = sub { ... };
my $otherapp = sub { ... };
builder {
    mount '/some' => $someapp;    # ok
    #and here need something like:
    mount "_regex_here" => $otherapp;   #???
    mount '/' => $defaultapp; #OK - last mount is the "default"
}

,例如,匹配的请求

  • /some/path-要由$someapp处理(这是可以的)
  • /[A-Z]w+/w+.(xxx|yyy|zzz)$-要通过$otherapp
  • 处理
  • 任何其他请求都需要由$defaultapp(也可以)处理

这可能是" damm -easy" - 但是我对Plack :: Builder的阅读没有给出答案。(MAUAL和示例中的每个mount基于strict /path ...)

edit :如果mount无法做到这一点,是否可以以某些 clean (不读取hackish)方式解决上述要求?我不需要更改PATH_INFO,也不需要SCRIPT_NAME(如URLMAP所做的那样) - 仅需要运行给定的$otherapp,以适应匹配的请求。

edit2

更清楚。$someapp$otherapp已经存在。尤其是$otherapp是一个复杂的应用程序,以自己的方式处理每个请求的内容 - 但是可以通过REGEX来描述"属于$otherapp"的请求。

我无法使用mount /fixed/prefix,因为$otherapp在运行时创建不同的URL,例如。例如,基于用户活动,它可以创建/Abc/xyz.eee和/或/Zzz/uuu.ddd等。因此,我不能前缀$otherapp,例如:

mount '/other' => $otherapp

现在,要"导入"这个旧的 $otherapp到新的基于PSGI的服务器,此外,$defaultapp$someapp将对$otherapp的数据做一些事情。这听起来很复杂,但实际上并非如此 - 只需要根据请求将REGEX运行$otherapp,例如Apache的SetHandler somehandler *.ext ...

代码实际上是

push @{$self->{_mapping}}, [ $host, $location, qr/^Q$locationE/, $app ];

如您所见,$location 中没有支持的正则是,也许您可以通过提供'\Eregex_here\Q'作为位置来欺骗它,我不知道欺骗它的方法。

相关内容

  • 没有找到相关文章

最新更新