Laravel所有路由均跳转至welcome blade模板问题求助
Laravel路由全部跳转至welcome模板的解决方法
问题原因
- 多语言中间件跳转逻辑错误:你的
setLocale中间件检测到请求不带locale前缀时,直接重定向到了带locale的根路径,而非保留原请求路径拼接前缀 - 业务路由未纳入多语言分组:所有
/about、/rooms等路由都定义在{locale}前缀的路由组外,带locale前缀的访问请求无法匹配到对应路由,触发跳转 - 旧路由缓存未清理:如果之前开启了路由缓存,修改后的路由规则不会生效
解决步骤
1. 调整路由结构
把所有业务路由移入多语言前缀路由组内,同时把setLocale中间件放到组的全局配置上,简化写法:
Route::group(['prefix' => '{locale}', 'middleware' => 'setLocale'], function(){ Route::get('/','Room_randring_welcom@index')->name('post'); Route::get('/about', function () { return view('aboutUs'); }); Route::get('/rooms', function () { return view('Room'); }); Route::get('/contact','Email_send@contact'); Route::post('/contact','Email_send@Contact_Submit')->name('Contact.submit'); Route::get('/Gallery', function () { return view('Gallery'); }); Route::get('/room_detail', function () { return view('room_details'); }); });
2. 修正setLocale中间件逻辑
修改中间件代码,跳转时保留原请求路径,不要直接跳转到根路径:
public function handle(Request $request, Closure $next) { $allowLocales = ['en', 'zh-CN', 'fr']; // 替换为你实际支持的语言列表 $locale = $request->segment(1); // 如果路径前缀不是支持的语言,自动补全默认语言前缀并保留原路径 if (!in_array($locale, $allowLocales)) { $defaultLocale = config('app.locale'); return redirect()->to("/{$defaultLocale}/" . $request->path()); } app()->setLocale($locale); return $next($request); }
3. 清理路由缓存
执行命令清理旧的路由缓存,让新配置生效:php artisan route:clear
生产环境可以执行以下命令生成优化后的路由缓存:php artisan route:cache
修改完成后测试即可,访问/about会自动跳转到带对应语言前缀的about页面,不再回到welcome模板。
内容的提问来源于stack exchange,提问作者lakouis marouane
相关产品推荐
相关产品推荐

