目前我正在使用laravel开展一个新项目。对于这个项目,我需要为一组路由添加前缀,并需要使用中间件添加前缀。中间件是 -
public function handle($request, Closure $next)
{
$segments = $request->segments();
if( $request->is('admin/*') ){
return $next($request);
}
array_unshift($segments,'admin');
return redirect()->to(implode('/',$segments));
}
我的routes / web.php文件是 -
Route::group(['middleware' => 'admin','prefix' => 'admin'],function(){
Route::get('segments',function(){
return request()->segments();
});
});
但不幸的是,这对我不起作用。如果我不手动添加admin /前缀,则中间件不会强制重定向我。但是,如果我从路由组中删除'prefix' => 'admin'
,那么它可以工作。我怎么解决这个问题?
抱歉,因为我的英语不好。
答案 0 :(得分:0)
这种方法不适用于您,因为您只是将中间件应用于admin/*
路由。
如果您想将用户从任何非admin/*
路由重定向到admin
路由,您可以执行此类操作。将此路线添加到web.php
:
Route::get('{param1?}/{param2?}/{param3?}', 'RedirectController@redirectoToAdmin');
创建RedirectController
控制器并执行此操作:
public function redirectoToAdmin()
{
return redirect('admin/' . request()->path());
}
此外,从您显示的路由组中删除admin
中间件。