У меня настроен реакции-маршрутизатора, как показано ниже:
<Router>
<Routes>
<Route path = "/" element = {<Home />} />
<Route path = "/post/:slug" element = {<Post />} />
// other routes
</Routes>
</Router>
Мой интерфейс размещен в корзине S3 и обслуживается через дистрибутив CloudFront. Все мои маршруты работают, кроме маршрута «/post/:slug». Это странно, потому что если я перехожу к сообщению с помощью хука useNavigate, он работает и загружает сообщение с правильным пулом. Однако, если я перезагружаюсь на странице сообщения или ввожу URL-адрес сообщения непосредственно в браузере (например, https://BASE_URL/post/slug/), он просто показывает пустую страницу и, похоже, не может определить маршрут. . Я в растерянности, потому что почтовый маршрут работает, если я запускаю свой интерфейс локально. Это просто не работает при развертывании с помощью S3 и CloudFront.
Для хоста CloudFront я пересылаю все пути «*» в свою корзину S3. Я также добавил страницу ошибок для пересылки в корневой объект /index.html.
Спасибо за ваш ответ. Я использую Vite, а не CRA.
Vite/CRA не имеют значения, именно так вы создаете свой артефакт... важна информация о развертывании/хостине, и для этого документация CRA по-прежнему актуальна. 😉
Спасибо, посмотрю документацию. Я добавил некоторые подробности в свой пост. Надеюсь, поможет!
Почему это будет работать локально, а не на AWS?
Я считаю, что путь должен быть «pathname/:id», а не «/pathname/:id».
Лол, чем это должно помочь
Спасибо за предложение, но оно не сработало.
Нашел исправление! Мне не хватало <base href = "/" />
в моем файле index.html.
Вам необходимо настроить хост так, чтобы он возвращал корневой файл index.html для всех запросов страниц в ваше приложение. См. документацию по развертыванию CRA для S3: create-react-app.dev/docs/deployment/#s3-and-cloudfront Чтобы внести ясность, это не то, что вы можете исправить из внешнего интерфейса. Можете ли вы отредактировать, чтобы поделиться тем, как вы настроили свой хост/сервис?