Laravel 5 Route Group和Basic(/)GET Route in group

pin*_*sia 15 php laravel-routing laravel-5

我正在使用管理面板工作Laravel 5.0 Web应用程序.我正面临着Routes的问题.我有如下的Grouped Admin Routes,

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');

    ........   

});
Run Code Online (Sandbox Code Playgroud)

事情很好.我可以毫无问题地使用以下,

http://domain.com/admin/dashboard
http://domain.com/admin/login
Run Code Online (Sandbox Code Playgroud)

但我想要

http://domain.com/admin
Run Code Online (Sandbox Code Playgroud)

显示登录页面或重定向到

http://domain.com/admin/login
Run Code Online (Sandbox Code Playgroud)

所以我改变了我的第一组跟随,

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');
});
Run Code Online (Sandbox Code Playgroud)

现在当我访问

http://domain.com/admin
Run Code Online (Sandbox Code Playgroud)

我在Chrome中看到"此网页有一个重定向循环".在Route组中可以吗?如果不是如何用.htaccess做到这一点?

UPDATE

以下是handle中间件的方法user.admin.除了更改基础模型以进行身份​​验证之外,它什

    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);
    }
Run Code Online (Sandbox Code Playgroud)

UPDATE

以下作品令人惊叹

http://domain.com/index.php/admin
Run Code Online (Sandbox Code Playgroud)

我没有触及.htaccesslaravel 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>
Run Code Online (Sandbox Code Playgroud)

我有近60-70条路线,所有这些路线都index.php在我需要的上述场景中无法接受index.php.

Ale*_*dis 5

问题是'user.admin'中间件总是在运行,即使在'/ admin/login'上也是如此.因此,当您访问"/ admin"时,您将被重定向到"/ admin/login",然后中间件会再次将您重定向到"/ admin/login",这将永远发生.这就是你得到'这个网页有一个重定向循环'的原因.

为了使其工作,您必须排除'admin/login'使用'user.admin'中间件.


dyn*_*mic 3

您可以不使用任何前缀,只需添加执行重定向的路由“admin”:

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