[英]How to redirect a route prefix to another route in laravel?
我正在使用laravel 5.7。 請查看我的代碼:
web.php
Route::prefix('admin')->group(function () {
Route::get('/', function () {
return redirect()->route('admin.check');
});
Route::get('/check-auth', 'Admin\AdminController@checkAuth')->name('admin.check');
});
AdminController::checkAuth()
public function checkAuth()
{
if(true == Auth::guard('admin')->user()){
return redirect()->route('cs.dashboard');
} else{
return redirect()->route('admin.login');
}
}
我創建了一組前綴為admin
的路由。
我需要的是,當我使用url localhost:8000/admin
它應檢查admin用戶的身份驗證,如果用戶已登錄,則應顯示admin儀表板,否則將其重定向到admin登錄頁面: localhost:8000/admin/login
但這里的問題是我收到apache錯誤,內容為:
Not Found
The requested resource /admin was not found on this server.
我還嘗試使用htaccess文件將其放置在root/public/admin
位置,它某種程度上解決了我的問題,但是我必須使用此url。
localhost:8000/index.php/admin
而且我的網址中不需要index.php。
這是我的.htaccess文件的外觀:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
請幫我解決。
檢查用戶是否通過身份驗證的正常方法是中間件
在您的情況下,當您轉到以下位置時,將運行check-auth: localhost:8000/admin/
或localhost:8000/admin/check-auth
否則laravel將不會檢查身份驗證。
請查看Laravel中間件。
我認為最好的方法是使用中間件來檢查登錄用戶是否為admin,這將使您的代碼比現在更美觀。您只需要使中間件檢查它是否為admin。如果是管理員,則返回$next($request)
,如果不重定向至其他頁面,則更改代碼。
Route::prefix('admin')->group(function () {
Route::get('/', 'AdminController@index');
});
然后創建管理控制器並添加索引功能,例如
public function __construct()
{
$this->middleware('admin');
}
public function index()
{
return view('adminpage');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.