35

假设我有以下内容:

Route::group(array('domain' => array('admin.example.com')), function()
{
    ...
});

Route::group(array('domain' => array('app.example.com')), function()
{
    ...
});

Route::group(array('domain' => array('dev.app.example.com')), function()
{
    ...
});

有没有办法让多个域共享一个路由组?就像是:

Route::group(array('domain' => array('dev.app.example.com','app.example.com')), function()
{
    ...
});
4

9 回答 9

62

Laravel 似乎不支持这一点。

我不确定为什么我没有早点想到这一点,但我想一种解决方案是在单独的函数中声明路由并将其传递给两个路由组。

Route::group(array('domain' => 'admin.example.com'), function()
{
    ...
});

$appRoutes = function() {
    Route::get('/',function(){
        ...
    }); 
};

Route::group(array('domain' => 'app.example.com'), $appRoutes);
Route::group(array('domain' => 'dev.app.example.com'), $appRoutes);

我不确定此解决方案是否会对性能产生重大影响。

于 2013-09-04T18:10:51.570 回答
18

拉拉维尔 5.1

 

Route::pattern('subdomain', '(dev.app|app)');
Route::group(['domain' => '{subdomain}.example.com'], function () {
  ...
});

 

Route::pattern('subdomain', '(dev.app|app)');
Route::pattern('domain', '(example.com|example.dev)');
Route::group(['domain' => '{subdomain}.{domain}'], function () {
  ...
});

于 2015-06-11T20:44:12.220 回答
6

您也可以传递域名:

Route::pattern('domain', '(domain1.develop|domain2.develop|domain.com)');
Route::group(['domain' => '{domain}'], function() {
    Route::get('/', function($domain) {
        return 'This is the page for ' . $domain . '!';
    });
});

以防万一您需要知道调用控制器的域名。使用 Laravel 5.6 对其进行了测试。

于 2018-09-26T20:59:31.680 回答
4

这个也有兴趣!我正在尝试为一个控制器操作注册一个本地开发 + 生产子域路由。

IE

# Local Dev
Route::group(array('domain' => "{subdomain}.app.dev"), function() {
    Route::get('/{id}', 'SomeController@getShow');
});

# Production Server
Route::group(array('domain' => "{subdomain}.app.com"), function() {
    Route::get('/{id}', 'SomeController@getShow');
});

我试过了:

# Failed
Route::group(array('domain' => "{account}.app.{top_level_domain}"), function() {
    Route::get('/{id}', 'SomeController@getShow');
});

但它失败了。

不是一个大问题,正如 DesignerGuy 所提到的,我可以将一个函数传递给两条路线 - 但如果它们可以分组,那就更优雅了:)

于 2013-09-07T17:32:35.793 回答
3

检查laravel 文档,如果您的主域是 myapp,则在生产中是myapp.com,在本地环境中myapp.dev尝试使用*

Route::group(array('domain' => '{subdomain}.myapp.*'), 
function()
{
    ...
});
于 2014-01-19T20:04:48.407 回答
3

根据laravel 5.4+ 中的 laravel 文档 ,您可以这样使用:

Route::domain('{account}.myapp.com')->group(function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});
于 2018-08-29T07:03:58.680 回答
1

目前你不能。我有同样的问题'; 我的解决方法是使用 foreach 循环浏览您的子域并注册路由。

于 2013-09-04T06:54:10.727 回答
1

在 Laravel 关于同一主题的讨论中找到更好的答案是使用宏。这对我很有效。 https://github.com/laravel/framework/issues/4017#issuecomment-267820459

Route::macro("domain", function(array $domains, \Closure $definition) {
    foreach ($domains as $domain) {
        Route::group(['domain' => $domain], $definition);
    }
});

Route::domain(['foo.bar.dev', 'foo.bar'], function($route) {
    // Do stuff
});
于 2020-05-01T07:39:45.397 回答
0

看到这个链接。http://laravel.com/docs/routing#sub-domain-routing

Route::group(array('domain' => '{subdomain}.example.com'), function()
{
    ...
});

或使用此软件包。

https://github.com/jasonlewis/enhanced-router

它可以帮助您像这样设置组路由的位置。

Route::group(array('domain' => '{maindomain}'), function()
{
    ...
})->where('maindomain', '.+\.example\.com$');
于 2013-12-02T03:14:18.070 回答