Route::redirect 在 Laravel 5.5+ 中使用通配符
Route::redirect with wildcard in Laravel 5.5+
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
变量。
您可以使用:
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 服务器中添加重定向。
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
变量。
您可以使用:
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 服务器中添加重定向。