2014-11-06 4 views
4

Я хотел был бы иметь возможность использовать различные маршруты в моем приложении для разных доменов. Я хотел бы действовать по-разному в зависимости от того, является ли доменLaravel route group match весь домен

  • Мой собственный домен, например. 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.comSubdomain subdomain как ожидалось. Тем не менее, когда я посещаю с anotherdomain.com (я это установить в качестве псевдонима в моем файле ВХост, а также указав его закольцовывающий IP в моих хозяев файл), я получаю 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

Я думаю, что это не возможно, потому что вы объявили свой домен в конфигурации/app.php.

Вы можете попробовать создать отдельную среду для второго домена.

Вы можете посмотреть, как использовать второй домен в Laravel в this tutorial.

-1

Похож, вопрос старый. Тем не менее, вы можете использовать следующее:

Просто удалите часть группы из кода, как это будет применяться к любому другому домену

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

Кто бы ни проголосовал, не могли бы вы поделиться с нами причиной этого? Это правильный способ использования этого сайта. –

+0

Внимательно прочитайте вопрос и ответьте, какие из проблем, о которых идет речь, вы решили этим сообщением? –

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 применяет регулярное выражение, которое не позволяет использовать символы периода в значении, переданном фильтру. Следовательно, почему это работает, когда вы разбиваете его на сегменты, но не пытаетесь передать полный домен в качестве одного параметра.

Самым простым решением является изменение шаблона, применяемого к области фильтра в boot метод файла app/Providers/RouteServiceProvider.php следующим образом:

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

Это позволит вам отправлять полные домены через фильтр.

+0

К сожалению, это решение не работает для Laravel 4 (где этот вопрос был отправлен) –

Смежные вопросы