首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >laravel重定向多个旧的弹头到新的

laravel重定向多个旧的弹头到新的
EN

Stack Overflow用户
提问于 2019-04-13 11:38:41
回答 2查看 1.2K关注 0票数 0

随着时间的推移,我的博客urls已经变成了更精确的urls。

例如:

  1. domain.com/a/1
  2. domain.com/b/2
  3. domain.com/b/3

但是有些网页有旧的链接,我想用一种结构化的方式重定向。

所以首先我做了:

代码语言:javascript
运行
复制
Route::get('/a/{slug}', function($slug){
    return redirect('/b/'.$slug, 301);
});

现在我有很多老的鼻涕虫和新的鼻涕虫,我想知道是否有更明智的方法,而不是:

代码语言:javascript
运行
复制
Route::get('/b/1', function(){
    return redirect('/b/3' 301);
});
Route::get('/b/2', function(){
    return redirect('/b/3' 301);
});

我看起来有点像和数组或者其他更好的方式,比如:

  • 旧鼻涕虫=>新鼻塞
  • 1个=> 3
  • 2 => 3

  • (老鼻涕虫老鼻涕虫) =>新鼻塞
  • (1=2) => 3

我用了一个配这条路线的laravel包

我发现是这个吗提出的最接近的问题是:

代码语言:javascript
运行
复制
Route::pattern('old-slug', '(1|2)');
Route::get('/b/{slug}', function ($old-slug) {
    return redirect('/b/3' 301);
});

问题:

  • 最后的解决方案是要走的路吗?
  • 如果是这样的话,我已经试过了,而且已经不起作用了,我可能在那里有一些错误,因为我根据另一个提到的帖子编写了我自己的代码。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-13 12:00:31

哪一个更好?

两条路都可以。但是,如果您可以使用模式来覆盖它们,那么它会更好,因为您不需要额外的数组。否则,数组更具可读性和具体性,因为从数组中可以清楚地知道old-sulg被哪个new-slug替换。另外,如果一个旧的重定向到一个新的怒气,另一个旧的鼻涕虫重定向到另一个新的鼻涕虫,那么在这里模式将不是一个好的选择。另一方面,如果所有的老鼻涕虫都重定向到一个相同的新鼻涕虫,那么如果可能的话,拍打会更好。

如何修复最后一个解决方案?

在此解决方案中,您将使用名称定义模式/表达式。比如:

Route::pattern('pattern_name', 'pattern');

现在,当您想要使用此模式时,只需使用pattern名称即可。例如:

代码语言:javascript
运行
复制
Route::get('url/{pattern_name}', function(){
  // Codes
});

在这里,如果url模式与定义模式匹配,那么将调用闭包。

因此,要使您的代码工作,您应该按照以下步骤重构它:

代码语言:javascript
运行
复制
Route::pattern('old_slug', '(1|2)');

Route::get('/b/{old_slug}', function ($oldSlug) {
    return redirect('/b/3' 301);
});

这里您的模式名为old-slug,模式是1|2,意思是1 or 2。因此,如果有人调用/b/1/b/2,它将匹配该模式并执行return redirect('/b/3' 301);

票数 1
EN

Stack Overflow用户

发布于 2019-04-13 21:44:33

这是我最后所做的,因为它是最简单和最易于维护的方式:

代码语言:javascript
运行
复制
Route::get('/a/{slug}', function($slug) {

    $urls = [
        '1' => 'b/3',
        '2' => 'b/3'
    ];

    if(isset($urls[$slug])){
        $new_url = $urls[$slug];
    }else{
        $new_url = $b.'/'.$slug;
    };
   return redirect('$new_url, 301);
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55665021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档