Laravel中间件不会使用区域设置代码重定向url



我将 laravel 5.8 的 URL 结构从 domain.com/about 更改为 domain.com/[locale]/about 。 我想使用他们的语言代码将所有访问者从旧网址domain.com/about重定向到新的网址domain.com/[locale]/about。我的语言中间件检测并设置区域设置,但不重定向到新的 url 并下降到 404 页面。

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

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

路由/网络.php - 用于为所有 URL 设置区域设置前缀。

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

语言中间件.php - 使用区域设置重定向新 URL 后检测和设置语言

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);
    }
}

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

protected $routeMiddleware = [ 'auth' => AppHttpMiddlewareAuthenticate::class, 'language' => AppHttpMiddlewareLanguageMiddleware::class, ];

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

Route::post('login', 'ApiAuthApiLoginController@login')->middleware('language');

有关更多详细信息:如何将区域设置添加到 url 中

最新更新