laravel - Route::redirect 在 Laravel 5.5+ 中使用通配符

标签 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 是否允许使用通配符,或者是我使用 Controller 的唯一选择

编辑:我正在尝试做的是这样的:

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},不用担心,但在这种情况下我更喜欢创建自己的 Controller 或直接在 Web 服务器中添加重定向。

关于laravel - Route::redirect 在 Laravel 5.5+ 中使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49632994/

相关文章:

jquery - Laravel 5.5 jQuery ajax 方法

mysql - Laravel DB raw 返回双倍总和

php - 如何删除 URL Generated Laravel 中的 “public/index.php”?

php - laravel 5.4 内部查询中的变量未定义

php - 禁止为 E_USER_WARNING 抛出异常

php - 与外国风俗的 Eloquent 关系-其他关键值(value)

php - 不同日期格式关系的动态参数

php - Laravel 关系 - 是否有多个*不必要的*数据库调用?

php - Laravel - 如何通过路由组将变量传递给中间件?

laravel-5 - 如何将中间件从 laravel 5 中的包附加到现有的命名路由?