在react中重新加载页面时如何避免404错误?

我有一个使用Primer-react模板开发的React应用程序。它具有一个管理仪表板,并且在仪表板侧面板中具有多个路由。我在index.js中设置了一个Auth路由,当我转到每个路由时,它都可以正常运行。但是当重新加载页面时,页面显示找不到404页面!


我保护AuthRoute中的“ /”路径,以便保护所有以“ /”开头的路径(我在仪表板内部有诸如“ / usertable”,“ / users”,“ / payments”等路径)。我不确定这里是否发生错误,因为有些路由(仪表板外部)应该在没有Auth的情况下进行访问,例如“ / Signin”。


我假设,如果我可以保护仪表板内每个路由的精确路径(例如精确路径=“ / usertable”)而不是保护所有“ /”路径,那么404问题将得到解决!但是当我这样做时,注销后,我可以通过浏览器“后退”按钮返回到仪表板,这会产生另一个问题。我该如何解决?


index.js


import React from 'react';

import { BrowserRouter, Switch, Route, Redirect } from 'react-router-dom';

import { render } from 'react-dom';

import Auth from './auth';

import AppProvider from './components/AppProvider/AppProvider';

import Dashboard from './containers/Dashboard';

import { ForgotPassword, Signin, ResetPassword } from './pages';

import registerServiceWorker from './registerServiceWorker';


const AuthRoute = ({ component: Component, ...rest }) => (

  <Route {...rest} render={props => {

    if (Auth.isAuthenticated()) {

      return <Component {...props} />

    }

    else {

      return <Redirect to={{ pathname: '/signin' }} />

    }

  }} />

)


export default render(

  <AppProvider>

    <BrowserRouter>

      <Switch>

        <Route exact path="/forgot" component={ForgotPassword} />

        <Route exact path="/signin" component={Signin} />

        <Route exact path="/reset/:token?" component={ResetPassword} />

        <AuthRoute path="/" component={Dashboard} />

        <Route path="/" component={Dashboard} />

      </Switch>

    </BrowserRouter>

  </AppProvider>

  , document.getElementById('root'));


registerServiceWorker();


临摹微笑
浏览 237回答 2
2回答

LEATH

当您重新加载页面时,会收到404,因为您在实际收到html文档响应之前首次命中了服务器,并且服务器可能仅配置为发送您index.html的请求GET '/'您需要设置服务器以捕获所有传入的URL(/*)并呈现您的index.html

慕后森

如果要使用netlify进行部署,请_redirects在公用文件夹中创建一个文件,并在其中添加以下行。/*&nbsp;&nbsp;/index.html&nbsp;&nbsp;200
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript