Laravel 路由组导致重定向循环

Posted

技术标签:

【中文标题】Laravel 路由组导致重定向循环【英文标题】:Laravel route groups lead to redirect loop 【发布时间】:2014-09-11 02:38:05 【问题描述】:

各位开发者,

我在 laravel 路由方面有点挣扎。我只是构建了登录代码,登录似乎可以正常工作。但是,当我被重定向到“/”时,我最终会得到一个重定向循环。

当访客默认 url = "/" 并且经过身份验证时默认 url 也 = "/",所以我猜有些东西不是我想要的那样工作。

相关路由代码如下:

Route::group(["before" => "guest"], function() 
    Route::any("/", [
        "as"    => "home/splash",
        "uses"  => "HomeController@showSplash"
    ]);
);

Route::group(["before" => "auth"], function() 
    Route::any("/", [
        "as"    => "home/dashboard",
        "uses"  => "HomeController@showDashboard"
    ]);
);

当我删除之前的身份验证组时,它会加载启动页面。例如,当我将“auth”之前的名称更改为“auth5”时​​,它会加载仪表板..但是 auth5 没有在我的代码中的任何地方进行编程..所以要么我完全不知道这些路由组是如何应该工作,或者我做错了什么愚蠢的事情:p

最后但同样重要的是,我的身份验证过滤器也重定向到“/”

问候,

手球

更新 =>

/* GUESTS GROUP */
Route::group(["before" => "guest"], function() 

Route::any("/splash", [
    "as"    => "home/splash",
    "uses"  => "HomeController@showSplash"
]);


/* AUTHENTICATED USERS GROUP */
Route::group(['before' => 'auth'], function() 

Route::any("/dashboard", [
    "as"    => "home/dashboard",
    "uses"  => "HomeController@showDashboard"
]);

这可行..但现在我的网站无法再以“/”的形式访问。由于显而易见的原因,这令人沮丧..

当我在 before => 来宾组中添加这条路线时:

Route::any("/", [
    "as"    => "home/home",
    "uses"  => "HomeController@showSplash"
]);

它直接回到重定向循环。我的过滤器如下所示:

Route::filter('auth', function()

    if (Auth::guest())
    
        if (Request::ajax())
        
            return Response::make('Unauthorized', 401);
        
        else
        
            return Redirect::guest('/splash');
        
    
);

Route::filter('guest', function()

    if (Auth::check()) return Redirect::to('/');
);

我真的错过了一些明显的东西:)

【问题讨论】:

您可能还需要修改您的 filters.php @delmadord 正如我所说,我的身份验证过滤器已经重定向到“/”:p 您可以发布您的身份验证和访客过滤器代码 小更新,我认为它现在进入我的路由文件->它看到“之前”=>“auth”,运行重定向到“/”的过滤器代码,他返回它看到"之前" => "auth" 再次运行过滤器代码.. 等认为这是导致循环:) 只需将 auth filter 重定向到登录页面而不是 / 【参考方案1】:

只需将身份验证过滤器重定向到登录页面而不是'/'

【讨论】:

我更新了我原来的帖子,我还在挣扎:( 现在我不确定你在做什么。 guest 过滤器用于保护已登录用户的登录路由。 好吧,目标是相对简单的。我想将“/”作为我的默认主页.. 但我无法让它工作:) 您的问题过于臃肿 - 重新格式化并确保包含过滤器以及实际路由,其中​​包含 /splashdashboard 的哪个路由应该做什么的信息。【参考方案2】:

长话短说,这些过滤器很烦人,在执行 http 请求时,您可以选择路由.. 或者您会得到 404。就这么简单!

if (Auth::guest()) 
    << Routes for guests go here >>
 else 
    << Routes when logged in go here >>

故事结束!

感谢大家的帮助!

【讨论】:

以上是关于Laravel 路由组导致重定向循环的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 子域端点不断重定向并出现 301 错误

重定向进入空白页面而不重定向到路由 Laravel 5.8

如何在 Laravel 4 中将一个路由重定向到 HTTPS,将所有其他路由重定向到 HTTP?

重定向到资源路由时路由不存在[Laravel]

Laravel 5.2 - 在中间件请求中获取路由组名称

提交表单 Laravel 后重定向到不同的路由