2015-06-16 75 views
15

我正在使用管理面板来管理Laravel 5.0 Web应用程序。 我正面临路线问题。我有分组管理路线如下,Laravel 5路由组和基本(/)组中的GET路由

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

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

    Route::get('dashboard', [ 
     'as'   => 'admin.dashboard', 
     'uses'  => '[email protected]', 
     'permission' => 'admin_dashboard' 
    ]); 

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

    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' => '[email protected]' 
    ]); 
    Route::get('login', [ 
     'as' => 'admin.login', 
     'uses' => '[email protected]' 
    ]); 
    Route::get('logout', [ 
     'as' => 'admin.login', 
     'uses' => '[email protected]' 
    ]); 
    Route::post('login', '[email protected]'); 
}); 

现在Whe n我访问

http://domain.com/admin 

我在'这个网页有一个重定向循环'在铬。路线组中可能吗?如果不是如何用.htaccess做到这一点?

UPDATE

下面是一个中间件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); 
    } 

UPDATE

这是惊人的,下面的工作

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

我没碰过默认.htaccess通过laravel 5.0,低于供给,

<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条路线,a所有这些工作没有index.php接受在上述情况下我需要index.php

+0

请发布您的中间件 – Szenis

+0

@ Szenis-谢谢。我已经更新了我的答案。 –

+0

您可以尝试最后申报'/'路线吗?我想知道以什么顺序评估的路线。 – Grasshopper

回答

3

你可以有一个没有任何前缀,只需添加路由“管理员”,做重定向:

// responds to http://domain.com/admin 
Route::get('admin', function(){ 
    if (//User not authenticated) 
    return redirect()->to('admin/login'); 
    else 
    //show admin; 
}); 
+0

@动态 - 谢谢。早些时候我尝试了几乎相同的事情。我用“return redirect(route('admin.login'));”它不起作用。可能是因为route()在Routes文件中毫无意义。我会尝试你的解决方案。 –

+0

@ dynamic-它不起作用。但是,谢谢任何方式。 –

5

的问题是,“user.admin”中间件总是处于运行状态,即使在“/管理/登录'。所以当你访问'/ admin'时,你被重定向到'/ admin/login',然后中间件再次将你重定向到'/ admin/login',并且这种情况会一直发生。这就是你得到'这个网页有重定向循环'的原因。

为了使它工作,你必须排除'admin/login'使用你的'user.admin'中间件。

0

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