2015-06-16 113 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的文件夾引起的。