Laravel 5.6 - 如何实现404页面/路由

我正在尝试实现404页面,但到目前为止还没有发生任何事情 . 我得到这个:

Not Found

The requested URL /test was not found on this server.

我有自定义 404 页面,文本完全不同 .

在我的 routes 文件中,我有这条路线:

Route::fallback(function(){
    return response()->view('errors/404', [], 404);
});

Handler.php 我添加了这个:

/**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        if ($exception instanceof MethodNotAllowedHttpException)
            abort(404);

        if ($this->isHttpException($exception)) {
            if ($exception->getStatusCode() == 404) {
                return response()->view('errors.404', [], 404);
            }
        }


        return parent::render($request, $exception);
    }

404.blade.php 位于 resources/view/errors

回答(3)

3 years ago

404.blade.php 文件应位于 resources/views/errors 下(注意视图中的's') . 而你自己也不会这样做 .

3 years ago

错误消息

Not Found

The requested URL /test was not found on this server.

是默认的服务器404错误消息,而不是来自Laravel .

您应该看到Laravel 's default error page when you don' t配置自定义错误页面 . 这意味着您可能未在服务器上正确配置 rewrite ,并且Laravel未收到请求 .

你可以在how to enable mod_rewrite on apache查看这篇文章

3 years ago

在handler.php immport中

use Illuminate\Session\TokenMismatchException;

并将render()函数编辑为以下

public function render($request, Exception $exception)
    {
        if ($exception instanceof TokenMismatchException) {
            if ($request->expectsJson()) {
                return response()->json([
                    'dismiss' => __('Session expired due to inactivity. Please reload page'),
                ]);
            }
            else{
                return redirect()->back()->with(['dismiss'=>__('Session expired due to inactivity. Please try again')]);
            }
        }
        elseif($exception->getStatusCode()!=422){
            return response()->view('errors.404');
        }
        return parent::render($request, $exception);
    }

这是您在任何错误上重定向到404页面的方式 . TokenMismatchException是会话到期,状态代码422是验证错误 . 这里$ request-> expectedJson()用于ajax json进程