当前位置: 首页 > 知识库问答 >
问题:

Laravel 5路由组和组内的基本(/)GET路由

裴意
2023-03-14

我正在使用管理面板开发Laravel 5.0 Web应用程序。我正面临一个问题与路线。我有如下分组管理路线,

Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['user.admin']], function () {
    Route::get('login', [
        'as' => 'admin.login',
        'uses' => 'AuthController@getLogin'
    ]);
    Route::get('logout', [
        'as' => 'admin.login',
        'uses' => 'AuthController@getLogout'
    ]);
    Route::post('login', 'AuthController@postLogin');
});

Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['user.admin','auth', 'admin.acl']], function () {

    Route::get('dashboard', [
        'as'         => 'admin.dashboard',
        'uses'       => 'DashboardController@index',
        'permission' => 'admin_dashboard'
    ]);

    //Image Handler
    Route::get('images/{size}/{name?}',[
        'as'   => 'admin.images',
        'uses' => 'ImagesController@images'
    ]);

    Route::resource('user', 'UsersController');

    ........   

});

事情进展顺利。我可以毫无问题地使用跟随,

http://domain.com/admin/dashboard
http://domain.com/admin/login

但是我想

http://domain.com/admin

显示登录页面或重定向到

http://domain.com/admin/login

所以我把第一组改成了第二组,

Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['user.admin']], function () {

    Route::get('/', [        
        'uses' => 'AuthController@getLogin'
    ]);
    Route::get('login', [
        'as' => 'admin.login',
        'uses' => 'AuthController@getLogin'
    ]);
    Route::get('logout', [
        'as' => 'admin.login',
        'uses' => 'AuthController@getLogout'
    ]);
    Route::post('login', 'AuthController@postLogin');
});

现在当我访问

http://domain.com/admin

我在chrome上看到“这个网页有一个重定向循环”。在路线组中可能吗?如果没有,如何使用.htaccess执行此操作?

更新

下面是中间件user.adminhandle方法。它只会更改身份验证的基础模型。

    public function handle($request, Closure $next)
    {
        \Config::set('auth.table', 'admins');
        \Config::set('auth.model', 'App\DB\Admin\Admin');

        \Config::set('session.cookie', 'admin_session');
        \Config::set('session.path', '/admin/');

        return $next($request);
    }

更新

这是惊人的,下面的作品

http://domain.com/index.php/admin

我没有接触过laravel 5.0提供的默认.htaccess,如下所示,

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

我有将近60-70条路由,它们都可以在没有index.phpaccept的情况下工作,在我需要的上述场景中index.php

共有3个答案

杨海
2023-03-14

该问题可能是由公用目录中名为admin文件夹引起的。

章宏恺
2023-03-14

无需任何前缀,只需添加执行重定向的路由“admin”:

// responds to http://domain.com/admin
Route::get('admin', function(){
  if (//User not authenticated)
    return redirect()->to('admin/login');
  else
    //show admin;
});
濮阳鸿卓
2023-03-14

问题是“user.admin”中间件始终在运行,即使在“/admin/login”上也是如此。因此,当您访问“/admin”时,您将被重定向到“/admin/login”,然后中间件将您再次重定向到“/admin/login”,这种情况将永远发生。这就是您得到“此网页具有重定向循环”的原因。

为了使其正常工作,您必须从“user.admin”中间件中排除“admin/login”。

 类似资料:
  • 通过Group可以实现路由分组,Group 路由分组可以简化你的路由撰写: 有两种方法来使用Group: 第一种,创建Group对象,通过Group方法传入 g := tango.NewGroup() g.Get("/1", func() string { return "/1" }) g.Post("/2", func() string { return "/2" }) o :=

  • 路由分组 路由分组功能允许把相同前缀的路由定义合并分组,这样可以简化路由定义,并且提高路由匹配的效率,不必每次都去遍历完整的路由规则(尤其是开启了路由延迟解析后性能更佳)。 使用Route类的group方法进行注册,给分组路由定义一些公用的路由设置参数,使用规范如下: Route::group('分组名(字符串)或者分组路由参数(数组)','分组路由规则(数组或者闭包)'); 其中路由参数和变量规

  • 信息:我正在使用Larvel 6.1版。0,我希望我的网站支持不同的语言。因此,我创建了一个新的中间件,并希望为我的路由提供一个前缀,以便Laravel可以确定语言。也许有更好的方法,但这是我到目前为止所做的。 URL最终应该是这样的: mywebsite.com/en/home, url/locale/home 用于设置区域设置的中间件 在内核中注册了新的中间件setlocale。php 我的网

  • 错误说 全部到未定义的函数组() 位于C:\laragon\www\online ComplianceManagement\routes\web。php:32 28 |返回视图('loginblade');29 |//路由::get('/index','Modules/Login/Http/Controllers/LoginController@index'); 30| }); 31| 32 |路

  • 本文向大家介绍asp.net-core 基本路由,包括了asp.net-core 基本路由的使用技巧和注意事项,需要的朋友参考一下 示例 这将匹配的请求/Home/Index,/Home/Index/123并/