Я хотел бы иметь возможность использовать разные маршруты в моем приложении для разных доменов. Я хотел бы действовать по-разному в зависимости от того, является ли домен
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
(У меня это настроено как псевдоним в моем файле vhost, а также указание его на 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
,
Спасибо,
Джонатон
Искал это тоже …
Наверное, не самое красивое решение, но оно работает
// 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 🙂
Я думаю, что это невозможно, потому что вы объявили свой домен в config / app.php.
Вы можете попробовать создать отдельную среду для второго домена.
Вы можете посмотреть, как использовать второй домен в Laravel в этот урок.
Это поздний ответ, но вы можете выполнить динамическую полную доменную маршрутизацию, не прибегая к уродливым взломам расширений. По умолчанию фильтр домена Laravel применяет регулярное выражение, которое не позволяет использовать символы точки в значении, переданном фильтру. Следовательно, почему это работает, когда вы разбиваете его на сегменты, а не если вы пытаетесь передать весь домен как один параметр.
Самое простое решение — изменить шаблон, примененный к фильтру домена в boot
метод вашего app/Providers/RouteServiceProvider.php
файл следующим образом:
public function boot(Router $router)
{
$router->pattern('domain', '[a-z0-9.]+');
parent::boot($router);
}
Это позволит вам отправлять полные домены через фильтр.
Похоже, вопрос старый. Тем не менее, вы можете использовать следующее:
Просто удалите часть группы из кода, так как это будет применяться к любому другому домену.
Route::any('/', function()
{
return 'Full domain ';// . $domain;
});