laravel route undefined url to specific controller

时间:2016-10-13 13:53:02

标签: php laravel laravel-5 laravel-5.2

在laravel 5.2中,我想将所有未定义的URL路由到一个特定的控制器。

我正在开发类似CMS的功能,我想要这个东西。

Route::get('profile', 'Controller@profile');
Route::get('{any}', 'Controller@page');

如此网址

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

www.domain.com/profile

所以第一个网址应该重定向到网页功能,第二个网址应该重定向到个人资料功能

基本上我想要一些关于N数或参数的想法,因为在页面中它可以是任意数量的参数,如" www.domain.com/post/po-t/some/thing"

3 个答案:

答案 0 :(得分:2)

路线

Route::get('{any}', 'Controller@page');

仅适用于

这样的网址

www.domain.com/post

如果你想要更多选项,你必须制作另一条路线,如

Route::get('{any}/{any1}', 'Controller@page');

这适用于两个选项,例如此回调

www.domain.com/post/asdfgd

答案 1 :(得分:0)

未定义的路由生成404 HTTP状态。您可以在404.blade.php上创建resources/views/errors页面,放置您要显示的任何视图。每当发生404错误时,它都会将您重定向到该页面。你不需要做任何其他事情,laravel会照顾现场背后的其余部分。

答案 2 :(得分:0)

使用middleware

在handle方法中,您可以访问$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');
}