Laravel 5.5中引入的新Route::redirect
是实用的,但它是否允许{any}
通配符?
这是我以前在Laravel 5.4中所做的事情
Route::get('slug', function () {
return redirect('new-slug', 301);
});
在Laravel 5.5中,我可以执行以下操作:
Route::redirect('slug', url('new-slug'), 301);
通过摆脱闭包来允许路由缓存。
到目前为止一直很好,但如果我想使用通配符怎么办?在Laravel 5.4中,我可以做到:
Route::get('slug/{any}', function ($any) {
return redirect('new-slug/'.$any, 301);
});
当然,我仍然可以在Laravel 5.5中使用它,但我的意思是能够缓存我的路径文件。
新的Route::redirect
是否允许使用通配符,或是我使用控制器的唯一选项?
编辑:我试图做的是这样的事情:
Route::redirect('slug/{any}', url('new-slug/'.$any), 301);
这当然不起作用,因为我不知道在哪里引用$any
变量。
答案 0 :(得分:3)
您可以使用:
Route::redirect('slug/{any}', url('new-slug', Request::segment(2)), 301);
如果您需要使用输入数据重定向:
Route::redirect('slug/{any}', str_replace_first('slug', 'new-slug', Request::fullUrl()), 301);
请注意,上述函数url()
Request::segment(2)
str_replace_first
将在每个请求中调用,尽管slug/{any}
没有匹配,没有什么可担心但我更喜欢创建在这种情况下我自己的控制器或直接在Web服务器中添加重定向。