Laravel路由组匹配整个域

Jon*_*hon 4 php dns routing laravel laravel-4

我希望能够在我的应用程序中为不同的域使用不同的路由.我想根据域名是否采取不同的行动

  • 我自己的域名,例如 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;
    });
});
Run Code Online (Sandbox Code Playgroud)

前两组完美运作.访问mysite.com显示My own domain和访问按预期subdomain.mysite.com显示Subdomain subdomain.但是,当我访问时anotherdomain.com(我将其设置为我的vhost文件中的别名以及将其指向我的hosts文件中的环回IP),我得到一个NotFoundHttpException:

/var/www/portfolio/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php
Run Code Online (Sandbox Code Playgroud)

码:

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

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

    throw new NotFoundHttpException;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以通过这种方式匹配任何不属于我的域名或域名子域名的域名?我需要能够访问域以便随后对其执行某些操作,就像我一样$subdomain.

谢谢你,乔纳森

小智 8

也在寻找这个......

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

// 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;
    });
});
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果您想测试它,请将一些假域添加到您的HOSTS文件中,并将它们指向127.0.0.1 :-)