我正在使用Admin面板处理Laravel 5.0 Web应用程序。 我正面临着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');
........
});
事情进展顺利。我可以毫无问题地使用以下内容,
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中获得'此网页有一个重定向循环'。在Route组中可以吗?如果不是如何用.htaccess做到这一点?
更新
以下是中间件handle
的{{1}}方法。除了更改基础模型以进行身份验证之外,它什么都不做。
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);
}
我没有触及laravel 5.0提供的默认http://domain.com/index.php/admin
,它位于下面,
.htaccess
我有近60-70条路线,并且在我需要<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>
的上述情况下,所有路线都没有index.php
接受。
答案 0 :(得分:5)
问题是'user.admin'中间件总是在运行,即使在'/ admin / login'上也是如此。因此,当您访问“/ admin”时,您将被重定向到“/ admin / login”,然后中间件会再次将您重定向到“/ admin / login”,这将永远发生。这就是你得到'这个网页有一个重定向循环'的原因。
为了使其工作,您必须排除'admin / login'使用'user.admin'中间件。
答案 1 :(得分:3)
你可以没有任何前缀,只需添加一个执行重定向的路由'admin':
// responds to http://domain.com/admin
Route::get('admin', function(){
if (//User not authenticated)
return redirect()->to('admin/login');
else
//show admin;
});
答案 2 :(得分:0)
问题可能是由公共目录中名为admin
的文件夹引起的。