【问题标题】:How to redirect a route prefix to another route in laravel?如何将路由前缀重定向到laravel中的另一条路由?
【发布时间】:2019-05-13 11:54:35
【问题描述】:

我正在使用 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 时,它应该检查管理员用户的身份验证,如果用户已登录,那么它应该显示管理员仪表板,否则将他重定向到管理员登录页面: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>

请帮我解决。

【问题讨论】:

  • 您可以使用middleware 来检查用户是否是管理员。
  • 我正在将此中间件用于我的其他路由,但如果有人使用 url 直到只有管理员,这应该在我对该路由的关闭中。
  • 如何创建一个像RedirectIfNotAdmin 这样的新中间件来包含您的管理员路由并检查用户是否为管理员?
  • 你使用的是什么操作系统?
  • @Laerte 我使用的是 Ubuntu 18.04

标签: php laravel apache .htaccess


【解决方案1】:

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

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

请查看 Laravel 中间件。

【讨论】:

  • 在我的情况下 check-auth 没有运行,我收到错误:在此服务器上找不到请求的资源 /admin。这段代码只是我的 web.php 文件和控制器的一部分。
【解决方案2】:

我认为最好的方法是使用中间件来检查登录用户是否是管理员.. 它会让你的代码比现在更优雅.. 您只需要制作中间件来检查它是否是管理员..如果是管理员则返回$next($request),如果不是重定向到其他页面.. 然后更改您的代码..

 Route::prefix('admin')->group(function () {
        Route::get('/', 'AdminController@index');
});

然后创建管理控制器并添加索引功能,如

public function __construct()
{
    $this->middleware('admin');
}

public function index()
{
    return view('adminpage');
}

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 2017-12-18
    • 2012-01-21
    • 2019-07-23
    • 2011-08-18
    • 1970-01-01
    • 2019-09-07
    • 2013-01-05
    相关资源
    最近更新 更多