You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:54:03