Laravel 5.5+中Route::redirect是否支持{any}通配符?
Laravel 5.5+ 中使用
Route::redirect 实现带 {any} 通配符的重定向 好问题!Laravel 5.5 新增的 Route::redirect 不仅实用,完全支持包括 {any} 在内的路由通配符,而且写法比闭包方式更简洁,还能保留路由缓存的优势。下面直接给你对应实现方案:
1. 基础带参数重定向(单个层级)
如果你只是需要匹配单个子路径参数,比如 slug/xxx 重定向到 new-slug/xxx,Laravel 会自动帮你映射路由参数,无需手动拼接字符串:
// Laravel 5.4 闭包写法 Route::get('slug/{any}', function ($any) { return redirect('new-slug/'.$any, 301); }); // Laravel 5.5+ 等价的 Route::redirect 写法 Route::redirect('slug/{any}', 'new-slug/{any}', 301);
2. 匹配所有子路径的 {any} 通配符
如果你的需求是匹配 slug/ 下的所有层级路径(比如 slug/a/b/c 重定向到 new-slug/a/b/c),只需要加上参数约束 ->where('any', '.*') 即可:
// Laravel 5.4 闭包写法 Route::get('slug/{any}', function ($any) { return redirect('new-slug/'.$any, 301); })->where('any', '.*'); // Laravel 5.5+ 对应写法 Route::redirect('slug/{any}', 'new-slug/{any}', 301)->where('any', '.*');
3. 更语义化的永久重定向
因为你用的是 301 永久重定向,Laravel 还提供了专门的 Route::permanentRedirect 快捷方法,默认就是 301 状态码,代码更清晰:
Route::permanentRedirect('slug/{any}', 'new-slug/{any}')->where('any', '.*');
核心要点
Route::redirect会自动将原路由的参数填充到目标 URL 的对应占位符中,不用手动拼接,既安全又简洁- 所有路由参数的约束规则(比如
where方法)都可以直接应用在Route::redirect定义的路由上 - 这种写法完全支持路由缓存,和你用单个路径重定向的优势一致
内容的提问来源于stack exchange,提问作者pimarc
相关产品推荐
相关产品推荐

