Laravel 5.6请求URL参数重复:如何避免语言标识重复?
解决Laravel中URL语言参数重复的问题
这个问题我之前也碰到过,核心原因是你用相对路径拼接的时候,浏览器会把当前页面的路径作为基础来解析。比如当前页面已经在/en下,你写{{Request::segment(1)}}/training就相当于在当前路径后追加en/training,自然就变成了/en/en/training。
给你几个靠谱的解决办法:
1. 推荐:使用命名路由(最规范的做法)
先在你的路由文件里给训练页面的路由起个名字:
Route::get('/{lang}/training', [TrainingController::class, 'show'])->name('training');
然后在视图里用route()辅助函数生成链接,把语言参数传进去:
<a href="{{ route('training', ['lang' => Request::segment(1)]) }}">进入训练页面</a>
这样Laravel会自动帮你生成正确的绝对路径,完全不用担心重复的问题,而且以后如果路由结构调整,只需要修改路由定义,不用改视图里的链接,维护起来更方便。
2. 使用url()辅助函数生成绝对路径
如果暂时不想用命名路由,可以直接用url()函数基于应用根URL来拼接:
<a href="{{ url(Request::segment(1), 'training') }}">进入训练页面</a>
url()会自动帮你处理路径拼接,生成http://localhost/public/en/training这样的正确URL。
3. 用URL::to()方法拼接
和url()类似,也可以用门面类的方式:
<a href="{{ URL::to(Request::segment(1) . '/training') }}">进入训练页面</a>
或者用多参数的形式更简洁:
<a href="{{ URL::to(Request::segment(1), 'training') }}">进入训练页面</a>
内容的提问来源于stack exchange,提问作者trojan
相关产品推荐
相关产品推荐

