2016-05-24 11 views
0

Laravel 5の短いリンクドメインをリダイレクトしたいと考えています。 URIリクエストを維持しながらxyz.comからexamplesite.comへ例えば:私はこのためのルートでドメイングループを使用することを試みたが、ドメイン名のレベルで動作していないようでした、だけでサブLaravelのドメイン名をリダイレクト

example.com/something?foo=var 

xyz.com/something?foo=var 

はにリダイレクトされます-ドメイン。私が選択したもう一つの選択肢はMiddleWareのルートです。私が働いミドルウェア "RedirectsMiddleware" を設定していると私のroutesファイルに次き

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"は常に例外をスローしますが、クエリ文字列は無効です。私のミドルウェアのリダイレクトにもかかわらず、そのルートを探しているようです:ワイルドカードルートを使用する必要があります:

NotFoundHttpException in RouteCollection.php line 161: 
+0

'末端に追加されたルートは例外スロー: '手段? –

+0

申し訳ありませんが、特に私は何を意味するかを反映するために質問を編集しました。 – kirgy

答えて

2

URLの末尾にあるGET変数は、あなたが試みている経路を変更しません。 http://example.com/?var1=Aexample.com/とGET変数var1を使用しているため、Route :: get( '/'、function(){})として定義されたルートに「counts」がアクセスしています。言い換えれば、GET変数は通​​常、HTTP要求がどのルートを選択するかを判断するために無視されます。

ワイルドカードマッチングは、正規表現のルート方式を使用しています - >ここで、()

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

以上から分かるように、あなたは空の要求のために(「/」)空のルートをも必要です。この例では、 "get"動詞の代わりに "any"動詞も含まれています。

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

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

関連する問題