在Laravel 5.5+中使用通配符路由::重定向

时间:2018-04-03 14:46:56

标签: laravel laravel-5.5 laravel-routing

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变量。

1 个答案:

答案 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服务器中添加重定向。