【发布时间】: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