2014-11-06 55 views
4

我希望能够在我的应用程序中为不同的域使用不同的路由。我想采取不同的行动,具体取决于域名是否为Laravel路线组匹配整个域

  • 我自己的域名例如mysite.com/something
  • 我的域的子域例如subdomain.mysite.com/something
  • 任何其他域例如anotherdomain.com

我处理这个问题是这样的:

// Match my own domain 
Route::group(['domain' => 'mysite.com'], function() 
{ 
    Route::any('/', function() 
    { 
     return 'My own domain'; 
    }); 
}); 

// Match a subdomain of my domain 
Route::group(['domain' => '{subdomain}.mysite.com'], function() 
{ 
    Route::any('/', function($subdomain) 
    { 
     return 'Subdomain ' . $subdomain; 
    }); 
}); 

// Match any other domains 
Route::group(['domain' => '{domain}'], function() 
{ 
    Route::any('/', function() 
    { 
     return 'Full domain ';// . $domain; 
    }); 
}); 

前两组正常工作。如预期的那样,访问mysite.com显示My own domain并访问subdomain.mysite.com显示Subdomain subdomain。然而,当我与anotherdomain.com参观(我有这样的设置为我的虚拟主机文件的别名,以及它指向回送IP在我的hosts文件),我得到一个NotFoundHttpException

/var/www/portfolio/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php 

代码:

$others = $this->checkForAlternateVerbs($request); 

    if (count($others) > 0) 
    { 
     return $this->getOtherMethodsRoute($request, $others); 
    } 

    throw new NotFoundHttpException; 
} 

有没有一种方法可以匹配任何不属于我的域或域的子域的域?我需要能够访问该域名,以后也可以使用它,就像我使用$subdomain一样。

感谢, 乔纳森

回答

0

我认为这是不可能的,因为你已经宣布的config/app.php您的域名。

您可以尝试为第二个域创建单独的环境。

您可以在this tutorial中查看如何在Laravel中使用第二个域。

-1

看起来问题很老。但是,你可以使用以下命令:

单从代码中删除组部分,因为这将适用于任何其他域

Route::any('/', function() 
{ 
    return 'Full domain ';// . $domain; 
}); 
+0

无论谁投下了票,你会介意与我们分享原因吗?这是正确使用本网站的方式。 – 2015-02-16 09:10:48

+0

仔细阅读问题并回答您通过本文解决问题中描述的问题? – 2015-06-26 04:56:31

6

在寻找这也...

可能不是最漂亮的解决方案,但它的工作原理

// Match my own domain 
Route::group(['domain' => 'mysite.com'], function() 
{ 
    Route::any('/', function() 
    { 
     return 'My own domain'; 
    }); 
}); 

// Match a subdomain of my domain 
Route::group(['domain' => '{subdomain}.mysite.com'], function() 
{ 
    Route::any('/', function($subdomain) 
    { 
     return 'Subdomain ' . $subdomain; 
    }); 
}); 

// Match any other domains 
Route::group(['domain' => '{domain}.{tld}'], function(){ 

    Route::any('/', function($domain, $tld){ 
     return 'Domain: ' . $domain . '.' . $tld; 
    }); 
}); 

Route::group(['domain' => '{subdomain}.{domain}.{tld}'], function(){ 

    Route::any('/', function($sub, $domain, $tld){ 
     return 'subdomain: ' . $sub . '.' . $domain . '.' . $tld; 
    }); 
}); 

顺便说一句,如果你想测试一下,一些假域名添加到您的HOSTS文件,并引导他们到127.0.0.1 :-)

0

这是一个迟到的反应,但您可以做动态完整域路由而不诉诸丑陋的扩展黑客。默认情况下,Laravel域筛选器应用正则表达式,以防止在传递给筛选器的值中使用句点字符。因此,当你将它分解成细分时,它会起作用,但如果你试图将完整的域作为单个参数传递,那么它不起作用。

最简单的办法是修改应用于域滤波模式在app/Providers/RouteServiceProvider.php文件的boot方法如下:

public function boot(Router $router) 
{ 
    $router->pattern('domain', '[a-z0-9.]+'); 
    parent::boot($router); 
} 

这将允许你通过过滤器发送完整的域名。

+0

不幸的是,这个解决方案不适用于Laravel 4(这个问题发布的地方) – 2016-01-28 10:20:01