2016-05-24 55 views
0

我想重定向Laravel 5中的一個短鏈接域,例如, xyz.com到examplesite.com,同時保持URI請求。例如:在Laravel中重定向域名

xyz.com/something?foo=var 

會重定向到:

example.com/something?foo=var 

我試過在此航線使用域組,但它似乎並沒有對域名的水平,只有子工作-域。我選擇的另一個選項是MiddleWare路由。

我已成立了一個工作中間件 「RedirectsMiddleware」,並已在我的路線文件中的以下內容:

Route::group(['middleware' => ['redirects'] ], function() { 
    Route::get('/', '[email protected]'); 
}); 

我RedirectsMiddleware看起來是這樣的:

... 
    public function handle($request, Closure $next) 
    { 
     $protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === true ? 'https://' : 'http://';   
     $host = $_SERVER['SERVER_NAME']; 
     $defaulthost = 'example.com'; 

     if($host != $defaulthost) { 

      return Redirect::to($protocol . $defaulthost . $_SERVER['REQUEST_URI']); 
     } 

     return $next($request); 
    } 
... 

當請求只是「example.com 「或」example.com/?something=something「它重定向罰款。任何添加到最後的路由,例如「example.com/someroute」總是拋出異常,查詢字符串不起作用。它似乎在尋找那條路線,儘管我的MiddleWare重定向:

NotFoundHttpException in RouteCollection.php line 161: 
+0

'任何路線添加到末尾拋出異常:'手段? –

+0

對不起,我不是特別清楚,我編輯了這個問題來反映我的意思。 – kirgy

回答

2

您需要使用通配符路由。網址末尾的GET變量不會以您嘗試的方式更改路線。訪問http://example.com/?var1=A「計數」爲按Route :: get('/',function(){})定義的路由,因爲您正在使用GET變量var1訪問example.com/。換句話說,爲了確定HTTP請求應選擇哪個路由,GET變量通常被忽略。

通配符匹配使用正則表達式路由方法 - >其中()

Route::group(['middleware' => ['redirects'] ], function() { 
    Route::any('/{anything}', '[email protected]') 
     ->where('anything', '.*'); 
    Route::any('/', '[email protected]'); 
}); 

如上所見,你還需要空請求空路線任何(「/」)。這個例子還包括「任何」動詞而不是「get」動詞,在其請求匹配中更加貪婪。

Laravel - Using (:any?) wildcard for ALL routes?

https://laravel.com/docs/5.2/routing#parameters-regular-expression-constraints