url 路径错误 laravel 和 react-router
error with url path with laravel and react-router
我遇到了 React 路由器和 laravel 的路径问题。我想走这条路: /users/create 。它在 React 路由器上渲染得很好,但是当我在这条路径上并且我刷新页面时,我得到一个 404 并由于中间件而重定向。为什么会这样?
** 注意:当我到处使用 users-create 时 users/create 它有效,但不是我想要的。
代码:
AppRouter.js
<Router history={history}>
<div className="wrapper">
<Sidebar/>
<div className="main-panel">
<Navbar/>
<Switch>
<Route exact path='/dashboard' component={Dashboard} />
<Route exact path='/categories' component={Category} />
<Route exact path='/users/create' component={UserCreate} />
<Route exact path='/users' component={User} />
<Route component={NotFound}/>
</Switch>
<Footer/>
</div>
</div>
</Router>
Routes.php
Route::view('/dashboard', 'main')->middleware('auth', 'preventHistory');
Route::view('/categories', 'main')->middleware('auth', 'preventHistory');
Route::view('/users/create', 'main')->middleware('auth', 'preventHistory');
Route::view('/users', 'main')->middleware('auth', 'preventHistory');
Sidebar.js
<li className="nav-item ">
<NavLink exact to='/users' activeClassName='active'>
<span className="sidebar-normal">y</span>
</NavLink>
</li>
<li className="nav-item ">
<NavLink exact to='/users/create' activeClassName='active'>
<span className="sidebar-normal">x</span>
</NavLink>
</li>
当您点击刷新时,url 路径直接转到 Laravel,后者根本不知道该路径。这个路径只有 React 知道。
要解决此问题,您需要做的就是告诉 Laravel /users/create
是一个 React 路径,因此在遇到这样的路径时 Laravel 需要将请求转发到index.html.
这是所有框架的通病。由于我不是 PHP 人,因此无法提供代码示例。
但是,您可以考虑参考这个答案,它适用于 Spring、Java 和 Angular:
幸运的是我解决了这个问题。当我点击刷新或登录时,我通过 axios 在此端点上发出 http 请求,例如 axios('api/auth/check') 。问题是,axios 每次都在捕获 url 并命中相对路径 (api/..),因此它命中了错误的端点。我在每个 axios 请求的开头用一个 / 修复了它。
我遇到了 React 路由器和 laravel 的路径问题。我想走这条路: /users/create 。它在 React 路由器上渲染得很好,但是当我在这条路径上并且我刷新页面时,我得到一个 404 并由于中间件而重定向。为什么会这样?
** 注意:当我到处使用 users-create 时 users/create 它有效,但不是我想要的。
代码:
AppRouter.js
<Router history={history}>
<div className="wrapper">
<Sidebar/>
<div className="main-panel">
<Navbar/>
<Switch>
<Route exact path='/dashboard' component={Dashboard} />
<Route exact path='/categories' component={Category} />
<Route exact path='/users/create' component={UserCreate} />
<Route exact path='/users' component={User} />
<Route component={NotFound}/>
</Switch>
<Footer/>
</div>
</div>
</Router>
Routes.php
Route::view('/dashboard', 'main')->middleware('auth', 'preventHistory');
Route::view('/categories', 'main')->middleware('auth', 'preventHistory');
Route::view('/users/create', 'main')->middleware('auth', 'preventHistory');
Route::view('/users', 'main')->middleware('auth', 'preventHistory');
Sidebar.js
<li className="nav-item ">
<NavLink exact to='/users' activeClassName='active'>
<span className="sidebar-normal">y</span>
</NavLink>
</li>
<li className="nav-item ">
<NavLink exact to='/users/create' activeClassName='active'>
<span className="sidebar-normal">x</span>
</NavLink>
</li>
当您点击刷新时,url 路径直接转到 Laravel,后者根本不知道该路径。这个路径只有 React 知道。
要解决此问题,您需要做的就是告诉 Laravel /users/create
是一个 React 路径,因此在遇到这样的路径时 Laravel 需要将请求转发到index.html.
这是所有框架的通病。由于我不是 PHP 人,因此无法提供代码示例。
但是,您可以考虑参考这个答案,它适用于 Spring、Java 和 Angular:
幸运的是我解决了这个问题。当我点击刷新或登录时,我通过 axios 在此端点上发出 http 请求,例如 axios('api/auth/check') 。问题是,axios 每次都在捕获 url 并命中相对路径 (api/..),因此它命中了错误的端点。我在每个 axios 请求的开头用一个 / 修复了它。