Laravel 5 Route Group и Basic (/) GET Route внутри группы
Я работаю над веб-приложением Laravel 5.0 с панелью администратора.
Я столкнулся с проблемой с Маршрутами. Я группировал маршруты администратора, как показано ниже,
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]');
});
Теперь, когда я получаю доступ к
http://domain.com/admin
Я получаю "Эта веб-страница имеет цикл переадресации" в хроме. Возможно ли это в группе маршрутов? если не так, как это сделать с .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);
}
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 маршрутов, и все они работают без index.php
accept в приведенном выше сценарии мне нужно index.php
.
Ответы
Ответ 1
Проблема заключается в том, что промежуточное ПО 'user.admin' всегда работает, даже на '/admin/login'. Поэтому, когда вы получаете доступ к "/admin", вы перенаправляетесь на "/admin/login", а затем промежуточное программное обеспечение перенаправляет вас снова на "/admin/login", и это происходит навсегда. Это причина, по которой вы получаете "Эта веб-страница имеет цикл перенаправления".
Чтобы сделать это, вы должны исключить "admin/login" из своего промежуточного программного обеспечения "user.admin".
Ответ 2
Вы можете иметь это без какого-либо префикса, просто добавьте маршрут "admin", который выполняет перенаправление:
// responds to http://domain.com/admin
Route::get('admin', function(){
if (//User not authenticated)
return redirect()->to('admin/login');
else
//show admin;
});
Ответ 3
Проблема может быть вызвана папкой с именем admin
в общедоступном каталоге.