【问题标题】:Route::redirect with wildcard in Laravel 5.5+Route::redirect 在 Laravel 5.5+ 中使用通配符
【发布时间】:2018-09-12 22:51:17
【问题描述】:

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

【问题讨论】:

  • 我刚刚测试过,它可以工作(虽然是 5.6),所以我认为 5.5 也不会成为问题。编辑:5.5 也有效
  • @Indra 我已经更新了我的问题,向您展示我想要做什么
  • 你的意思是artisan route:cache?是的,它仍然可以工作
  • @ThomasEdwards 它确实有效,但我的问题是关于在 Laravel 5.5+ 中使用带有通配符的Route::redirectRoute::redirect('slug/{any}', url('new-slug/'.$any), 301); 不起作用,因为 $any 没有在任何地方指定。
  • 我认为它会起作用。尝试检查此 PR github.com/laravel/ideas/issues/654

标签: laravel laravel-5.5 laravel-routing


【解决方案1】:

你可以使用:

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

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 2018-04-21
    • 2023-03-07
    • 2018-07-09
    • 2018-11-06
    • 1970-01-01
    • 2018-07-13
    • 2018-06-03
    • 2015-07-13
    相关资源
    最近更新 更多