【问题标题】:Server side redirect with ReactJs使用 ReactJs 进行服务器端重定向
【发布时间】:2018-01-30 11:44:54
【问题描述】:

出于 SEO 原因,我正在尝试为某些页面发出服务器端重定向。我要解决的问题是我的一些页面将被谷歌索引,所以如果它们被删除或脱机,我们希望将它们重定向到不同的页面而不是显示 404。实现此类重定向的最佳方法是什么在服务器端使用 React Router(express.js)?

【问题讨论】:

  • 保持相同的映射。在映射的帮助下使用包装器。
  • @learner 你能扩展一下吗?
  • 你在使用 React Router 4 吗?

标签: reactjs express redirect react-router server-side


【解决方案1】:

你应该有一个定义路由规则的组件,像这样:

<Router>
 <Switch>
      <Route path='/login' component= {LoginPage}/>
       ......
 </Switch>
<Router>

我的意思是你应该定义一个定义重定向 url 的包装器:

      var redirectToUrl = get url from your logic here;
      var urlComponent = '';
      if ( redirectToUrl )
      {
        urlComponent = <Redirect to={listing}/>;
      }

现在将其添加到您的 url 处理页面:

<Router>
    <div>
      {urlComponent}
     <Switch>
          <Route path='/login' component= {LoginPage}/>
           ......
     </Switch>
</div>
    <Router>

【讨论】:

  • 但这不是RR4的做事方式。
【解决方案2】:
const redirect = (a,replace) => {
if(a.params.splat == "page1")
    replace("/page2")
}
<Route path="*" ... onEnter={redirect}/>

在 server.js 中

match(...,(error, redirectLocation, renderProps) => { 
   ... else if (redirectLocation) { res.redirect(302,`${redirectLocation.pathname}${redirectLocation.search}`...);

【讨论】:

    【解决方案3】:

    如果你使用的是 React Router 4,你可以在你的 Page 组件中添加 Redirect 组件来重定向失效的页面。 示例:假设组件试图从 API 获取对象,但得到了离线响应并将其存储在组件状态中:

    import React, { Component } from 'react';
    import { Redirect } from 'react-router-dom';
    
    export default class PageComponent extends Component {
    
        // ... other stuff
    
        render() {
            if (this.state.page_offline) {
                return (<Redirect to="/some-page-for-offline-data" />);
            }
    
            return (...); // normal page render
        }
    
    }
    

    【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2021-10-26
    • 2016-07-28
    • 2014-01-09
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多