如何在laravel中将路由前缀重定向到另一条路由?

时间:2018-12-12 11:22:52

标签: php laravel apache .htaccess

我正在使用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>

请帮助我解决该问题。

2 个答案:

答案 0 :(得分:0)

检查用户是否通过身份验证的常规方法是Middleware

在您的情况下,当您转到localhost:8000/admin/localhost:8000/admin/check-auth时运行check-auth,否则laravel将不会检查身份验证。

请查看Laravel中间件。

答案 1 :(得分:0)

我认为最好的方法是使用中间件检查登录用户是否为admin,这将使您的代码比现在更优雅。 您只需要使中间件检查它是否为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');
}