我将 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 中