【问题标题】:Laravel middleware doesn't redirect url with locale codeLaravel 中间件不会使用语言环境代码重定向 url
【发布时间】:2020-03-18 12:50:53
【问题描述】:

我将 laravel 5.8 的 URL 结构从 domain.com/about 更改为 domain.com/[locale]/about。 我想使用他们的语言代码将我的所有访问者从旧网址 domain.com/about 重定向到新网址 domain.com/[locale]/about。我的 LanguageMiddleware 检测并设置了语言环境,但没有重定向到新的 url 并掉到 404 页面。

当我看到 404 错误页面时,我的 LanguageMiddleware 没有显示返回 request()->segment(1)request()->path()

如何最准确地将旧 URL 重定向到新结构?

routes/web.php - 为所有 url 设置区域前缀。

Route::group(['prefix' => app()->getLocale()], function () {
    ...
});

LanguageMiddleware.php - 使用区域设置重定向新网址后检测和设置语言

class LanguageMiddleware
{
    protected $languages = ['en', 'tr', 'ru', 'fr', 'de'];

    public function handle($request, Closure $next)
    {
        // Locale detect and set (working)
        if (!session()->has('locale')) {
            session()->put('locale', request()->getPreferredLanguage($this->languages));
        }
        app()->setLocale(session()->get('locale'));


        // redirect from domain.com/about to domain.com/[locale]/about (doesn't work and falls 404 page with old url)
        $params = explode('/', request()->path());
        $language = $params[0];
        if (!in_array($language, $this->languages)) {
            return redirect(app()->getLocale().'/'.request()->path(), 301);
        }

        return $next($request);
    }
}

【问题讨论】:

    标签: php laravel localization laravel-5.8 laravel-middleware


    【解决方案1】:

    您好,请将此中间件添加到app/Http/Kernel.php

    protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'language' => \App\Http\Middleware\LanguageMiddleware::class, ];

    还将中间件添加到您的路由组中,如下所示:

    Route::post('login', 'Api\Auth\ApiLoginController@login')->middleware('language');

    更多详情:How to add locale into url

    【讨论】:

    • 好方法,但我可以创建 url,我无法从旧 url 重定向到新 url
    猜你喜欢
    • 2017-03-02
    • 2022-01-03
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 2013-12-01
    • 2017-07-20
    相关资源
    最近更新 更多