Это потому, что у вас, вероятно, нет серверной маршрутизации setup.
Когда вы загружаете /
- ваше приложение и весь JavaScript, который включает в себя логику маршрутизатора, загружаются в браузер. С этого момента реагирующий маршрутизатор обрабатывает навигацию на стороне клиента. Вы никогда не совершаете другую поездку на сервер (немного упрощенное утверждение, но это не запись в блоге, чтобы вдаваться в подробности).
Когда вы пытаетесь загрузить /url
напрямую, сервер не знает, как обработать этот запрос. Вот почему вам нужно настроить маршрутизацию на стороне сервера, чтобы ваш сервер понимал маршруты.
Вот как будет выглядеть ваш реструктурированный код (не готовый к работе код - просто чтобы дать вам представление)
// routes
const App = () => (
<Switch>
<Route path="/" component={Dashboard} exact />
<Route path="/admin" component={AdminDashboard} exact />
<Route path="/admin/movies" component={AdminMovies} />
<Route path="/admin/series" component={AdminSeries} />
<Route component={NotFound} />
</Switch>
);
// client
<BrowserRouter>
<App/>
</BrowserRouter>
// server (not the complete story)
<StaticRouter
location={req.url}
context={context}
>
<App/>
</StaticRouter>
Я бы предложил внимательно прочитать документацию, поскольку рендеринг на стороне сервера также откроет новые проблемы. В документации рассказывается, как с ними бороться.