我有3个域,在我的本地服务器上采用以下格式:
在我的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。本地 和 mydomainfirst。 co </ strong>。英国
答案 0 :(得分:2)
好的,我先说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()