2014-11-06 53 views
4

我希望能夠在我的應用程序中爲不同的域使用不同的路由。我想採取不同的行動,具體取決於域名是否爲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參觀(我有這樣的設置爲我的虛擬主機文件的別名,以及它指向回送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一樣。

感謝, 喬納森

回答

0

我認爲這是不可能的,因爲你已經宣佈的config/app.php您的域名。

您可以嘗試爲第二個域創建單獨的環境。

您可以在this tutorial中查看如何在Laravel中使用第二個域。

-1

看起來問題很老。但是,你可以使用以下命令:

單從代碼中刪除組部分,因爲這將適用於任何其他域

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

無論誰投下了票,你會介意與我們分享原因嗎?這是正確使用本網站的方式。 – 2015-02-16 09:10:48

+0

仔細閱讀問題並回答您通過本文解決問題中描述的問題? – 2015-06-26 04:56:31

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域篩選器應用正則表達式,以防止在傳遞給篩選器的值中使用句點字符。因此,當你將它分解成細分時,它會起作用,但如果你試圖將完整的域作爲單個參數傳遞,那麼它不起作用。

最簡單的辦法是修改應用於域濾波模式在app/Providers/RouteServiceProvider.php文件的boot方法如下:

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

這將允許你通過過濾器發送完整的域名。

+0

不幸的是,這個解決方案不適用於Laravel 4(這個問題發佈的地方) – 2016-01-28 10:20:01