2016-10-13 112 views
2

在laravel 5.2我想將所有未定義的URL路由到一個特定的控制器。laravel路由未定義的URL到特定的控制器

我正在開發CMS喜歡功能,我想要這個東西。

Route::get('profile', '[email protected]'); 
Route::get('{any}', '[email protected]'); 

所以URL像

www.domain.com/post/po-t/some/thing

www.domain.com/profile

所以第一個URL應該重定向到頁面功能和第二個網址到配置文件功能

基本上我想對N號或參數有一些想法,因爲在頁面中它可以是任意數量的參數,例如「www.domain.com/post/po-t/some/事情「

+0

你想在Controller @ page方法中完全做什麼? – Abhishek

回答

0

未定義的路由生成404 HTTP狀態。您可以在resources/views/errors上創建一個404.blade.php頁面,放置要顯示的任何視圖。每當發生404錯誤,它都會將您重定向到該頁面。你不需要做任何事情,拉拉維爾會照顧幕後的其他人。

2

路線

Route::get('{any}', '[email protected]');

只FO的URL,如果你有更多的選擇想要的工作就像

www.domain.com/post

,你必須做出這樣

Route::get('{any}/{any1}', '[email protected]');

另一條路線

這兩個選項的工作,這樣的回調

www.domain.com/post/asdfgd

+0

我知道,但我想要www.domain.com/post/asdfgd的解決方案,因爲我們不知道什麼是數字或參數 – user2293790

+0

也許您應該嘗試可選參數。據我所知,沒有你想要的解決方案。可選參數接近解決方案。 'Route :: get('{a?}/{b?}/{c?}/{d?}/{e?}/{f?}','Controller @ page'); –

0

使用middleware

在句柄方法中,您可以訪問$request對象。當找不到路線重定向到您的後備路線。請參閱this question獲取當前網址的選項

編輯:可以在Laracasts forum中找到實現。海報想要保護管理路線:

public function handle($request, Closure $next) 
{ 
    $routeName = Route::currentRouteName(); 

    // isAdminName would be a quick check. For example, 
    // you can check if the string starts with 'admin.' 
    if ($this->isAdminName($routeName)) 
    { 
     // If so, he's already accessing an admin path, 
     // Just send him on his merry way. 
     return $next($request); 
    } 

    // Otherwise, get the admin route name based on the current route name. 
    $adminRouteName = 'admin.' . $routeName; 

    // If that route exists, redirect him there. 
    if (Route::has($adminRouteName)) 
    { 
     return redirect()->route($adminRouteName); 
    } 

    // Otherwise, redirect him to the admin home page. 
    return redirect('/admin'); 
}