Laravel重定向到缺失路线上的正确路径

时间:2017-12-31 14:41:33

标签: laravel laravel-5 laravel-5.5

在我的应用程序中,当用户输入此URL时,http://127.0.0.1:8000/showContent/aboutUs laravel显示错误为

  

抱歉,找不到您要查找的页面。

正确的路径是http://127.0.0.1:8000/en/showContent/aboutUs,我试图管理它并为此添加缺失的段,例如:

路线:

Route::get('{lang?}/showContent/aboutUs', array('as' => 'lang', 'uses' => 'HomeController@showAboutUsPage'))->where('lang', '.+');

映射路线:

protected function mapWebRoutes()
{
    $locale = request()->segment(1);
    if ($locale != 'fa' && $locale != 'en') {
        $locale = 'fa';
    }
    app()->setLocale($locale);


    Route::middleware('web')
        ->namespace($this->namespace)
        ->prefix($locale)
        ->group(base_path('routes/web.php'));
}

on mapWebRoutes函数我使用多语言和管理路由,并且缺少参数作为segment(1)上的语言键我收到错误,现在我如何添加丢失的段或管理路由到重定向到正确的路径?

2 个答案:

答案 0 :(得分:0)

抱歉重复评论! 它与您的Web服务器有关。你可以使用.htaccess文件。 另一种方法是使用异常处理程序。您可以检查异常类型以及请求路由。然后,如果有必要,重定向到适当的URL。

答案 1 :(得分:0)

我的问题解决了:

我将kernel.php更改为:

protected $middleware = [
    \App\Http\Middleware\Language::class,

    ...

];

Language上课:

public function handle($request, Closure $next)
{
    $locale = $request->segment(1);

    if (!array_key_exists($locale, config('app.locales'))) {
        $segments = $request->segments();
        array_unshift($segments,config('app.fallback_locale'));
        return redirect(implode('/', $segments));
    }

    app()->setLocale($locale);

    return $next($request);
}