Routing Mojolicious中的域相关路由

Routing Mojolicious中的域相关路由,routing,mojolicious,mojo,Routing,Mojolicious,Mojo,我写了一个网站在Mojolicious需要路由到某些文件取决于域名。即: mydomain.com/foo -> controllerA#foo mydomain.es/foo -> controllerB#foo 本文档提供了以下解决方案: $r->get('/foo')->over(host => qr/mydomain\.com/)->to('controllerA#foo'); $r->get('/foo')->over(host =&

我写了一个网站在Mojolicious需要路由到某些文件取决于域名。即:

mydomain.com/foo -> controllerA#foo
mydomain.es/foo  -> controllerB#foo
本文档提供了以下解决方案:

$r->get('/foo')->over(host => qr/mydomain\.com/)->to('controllerA#foo');
$r->get('/foo')->over(host => qr/mydomain\.es/)->to('controllerB#foo');
但也警告我,这将禁用路由缓存

有更好的方法吗?如果没有,禁用路由缓存有多糟糕?这个网站需要能够处理很多请求(高达10.000/小时),所以我可以想象路由缓存是首选


谢谢

想到的一种方法是在mojolicious看到请求URI之前重写它。例如:

mydomain.com/foo -> mydomain.com/foo/com
mydomain.es/foo  -> mydomain.com/foo/es
然后添加一些路线:

$r->get('/foo/com')->to('controllerA#foo');
$r->get('/foo/es')->to('controllerB#foo');

我不知道您是如何部署此应用程序的,但如果您使用Apache或NGIX作为反向代理,您可以在那里处理域路由并重写它。

您找到了一种可接受的方法吗?不幸的是,没有。最后,我编写了一个钩子,在将url发送到路由器之前,按照您的建议重写url——但这并不是一个理想的解决方案,因为现在所有内部mojo调用(如url_for)都将返回错误的url(它将返回mydomain.com/foo/es,而不是mydomain.es/foo)。我认为问题的根源在于mojo的缓存模块中缺少跨域路由。