react-router 如何使用 redirectLocation 或 301 或 302 状态

Posted

技术标签:

【中文标题】react-router 如何使用 redirectLocation 或 301 或 302 状态【英文标题】:react-router how do I use redirectLocation or the 301 or 302 status 【发布时间】:2016-09-20 04:17:19 【问题描述】:

我们即将在 reactjs 中部署我们的网站,我们已经(重新)移动了一个 url,但将它合并到了我们的主页中,因此我们从 /[product]/menu 将其合并到 /[product]。现在他们说我应该用 301 回复 /[product]/menu 并将其重定向到 /[product],我该如何完成这个以及其他一些页面?

如何使用 react-router 设置 301 重定向?我在哪里设置哪些页面需要重定向到其他页面?我现在有这样的设置:

app.get('*', (req, res) => 
  // routes is our object of React routes defined above
  match( routes, location: req.url , (err, redirectLocation, props) => 
    console.log(redirectLocation);
    if (err)  // something went badly wrong, so 500 with a message
      res.status(500).send(err.message);

    // HERE: HOW DO I USE THIS?
     else if (redirectLocation)  // we matched a ReactRouter redirect, so redirect from the server
      console.log('301/302 yeah!');
      res.redirect(301, redirectLocation.pathname + redirectLocation.search);

...

我也用 reactjs 和 express。

编辑添加路由配置。

const routes = 
  path: '',
  component: AppComponent,
  childRoutes: [
    path: '/products',
    component: ProductsComponent,
    name: 'products'
  , 
    path: '/:slug',
    component: ProductComponent,
    name: 'product'
  ]

以防万一。在此处添加答案:

const routes = 
  path: '',
  component: AppComponent,
  childRoutes: [
    path: '/products',
    component: ProductsComponent,
    name: 'products'
  , 
    path: '/:slug',
    component: ProductComponent,
    name: 'product'
  ,  
    path: '/:product/menu', onEnter(nextState, replace)  replace(`/$nextState.params.product`) 
  , 
    path: '/oldlink/:testId', onEnter(nextState, replace)  replace(pathname: `http://newsite.com/oldlink/some/$nextState.params.testId`) 
  ]

【问题讨论】:

【参考方案1】:

在路由声明中,使用<Redirect>。 Example Here

【讨论】:

谢谢!如果我有这个设置,我该如何将它翻译成你给出的那个例子?更新了我的问题以反映我的路线配置。 我可以看到您发布解决方案。干得好! 谢谢!再次快速提问。我如何做一个绝对路径?当我在替换上写绝对路径时,它说Warning: A path must be pathname + search + hash only, not a fully qualified URL like 抱歉已经问了。哈哈!找到了解决方案。更新问题以防万一有人碰到这个问题。 @index 请务必在重定向标记中包含 301 状态。默认为 302。例如

以上是关于react-router 如何使用 redirectLocation 或 301 或 302 状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-router 中使用普通的锚链接

如何使用 react-route 链接刷新页面

如何将 this.state 转移到 react-routes?

如何使用 react-router 处理身份验证?

如何使用 IIS 设置 react-router clean URL?

如何从 express 重定向到 react-router?