Группа маршрутов 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 (У меня это настроено как псевдоним в моем файле 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,

Спасибо,
Джонатон

4

Решение

Искал это тоже …

Наверное, не самое красивое решение, но оно работает

// 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 🙂

7

Другие решения

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

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

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

0

Это поздний ответ, но вы можете выполнить динамическую полную доменную маршрутизацию, не прибегая к уродливым взломам расширений. По умолчанию фильтр домена Laravel применяет регулярное выражение, которое не позволяет использовать символы точки в значении, переданном фильтру. Следовательно, почему это работает, когда вы разбиваете его на сегменты, а не если вы пытаетесь передать весь домен как один параметр.

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

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

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

0

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

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

Route::any('/', function()
{
return 'Full domain ';// . $domain;
});
-1
По вопросам рекламы [email protected]