带有通配符的多个域的Laravel路由组,如何处理域后缀?
Posted
技术标签:
【中文标题】带有通配符的多个域的Laravel路由组,如何处理域后缀?【英文标题】:Laravel routing group for muliple domains with wildcards, how to handle domain suffixes? 【发布时间】:2015-02-24 23:55:26 【问题描述】:我有 3 个域,在我的本地服务器上采用以下格式:
mydomainfirst.local mydomainsecond.local mydomainthird.local在我的 routes.php 文件中,我有以下内容:
Route::group(array('domain' => 'domain.suffix'), function()
Route::get('/', 'Primary@initialize');
);
想法是在我的控制器中获取$domain
变量并从中提取第一/第二/第三部分,这很好。但是,现在我的网站上线了,这个路由文件不再起作用并抛出 Http-not-found 异常。过了一会儿,我发现问题在于域现在采用了mydomainfirst.co.uk
的格式。因为域后缀现在有 2 个部分,看来我需要这样做:
Route::group(array('domain' => 'domain.a.b'), function()
Route::get('/', 'Primary@initialize');
);
让它工作。这是愚蠢的。我怎么能告诉它只接受任何后缀?我可以使用“任何”通配符吗?
我尝试了一些类似this answer 的方法,但它不适用于路由组。
编辑:看来Enhanced Router 包至少可以让我在路由组中添加where
子句,但它是否解决了如何设置通配符的问题匹配不确定数量的段?我需要类似的东西:
domain.anything
这将匹配两者:
mydomainfirst.local AND mydomainfirst.co.uk
?
【问题讨论】:
看起来this package 可以帮助您解决问题 @lukasgeiter 谢谢,请查看编辑。->where('anything', '.*')
可以试试吗?
很遗憾,我什至无法安装此软件包。看起来它与最新的 Laravel 路由不兼容?截图:tinyurl.com/qdllvuo
是的,它在 github 上有一些未解决的问题,而且它似乎与 Laravel 4.2 不兼容。你可以试试this fork
【参考方案1】:
好的,我先说this package 的代码实际上看起来不错并且应该可以工作。即使您无法通过安装来运行它,您也可以获取文件并将代码与您自己的服务提供商等一起使用。
但也有一种快速而肮脏的解决方案。 (实际上这个包做起来很相似,但是看起来好多了;))
首先,这是一条路线的方法:
Route::group(array('domain' => 'domain.tld'), function()
Route::get('/', 'Primary@initialize')->where('tld', '.*');
);
所以路由组的 where 条件实际上是在单个路由上设置的。
当然,您不想为该组内的每条路由都执行此操作,因此您可以使用简单的 foreach 循环:
Route::group(array('domain' => 'domain.tld'), function($group)
Route::get('/', 'Primary@initialize');
foreach($group->getRoutes() as $route)
$route->where('tld', '.*');
);
注意:循环需要在所有路由之后。否则他们不会注册,因此不会返回getRoutes()
【讨论】:
这绝对是绝妙的,就像一个魅力。非常感谢!以上是关于带有通配符的多个域的Laravel路由组,如何处理域后缀?的主要内容,如果未能解决你的问题,请参考以下文章