You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:18:19