Размещенные файлы stati c не перенаправляются, если страница неизвестна или перенаправляет - PullRequest
0 голосов
/ 26 марта 2020

Этот проект создается Jenkins и размещается с файлами * stati c. Когда я проверяю это локально с npm run start, все работает нормально. Однако на производстве, когда размещаются файлы stati c, я получаю 404 при перенаправлении и на неизвестных страницах.

Пытаясь отладить это локально, я настраиваю подобную ситуацию.

  • Создание файлов * stati c с npm run build
  • Размещение файлов локально с python -m SimpleHTTPServer

Когда я go на simpleserver и go на несуществующий маршрут /thisdoesnotexist Я также получаю 404.

Я пытался использовать HashRouter, который, похоже, ничего не исправляет. Кроме того, я попытался использовать redirect в нижней части switch, чтобы перенаправить несуществующие маршруты на /, если ничего не распознано. Это также не похоже на работу.

Каков наилучший способ обработки несуществующих маршрутов и перенаправлений в сборке stati c?

1 Ответ

0 голосов
/ 26 марта 2020

Точнее, это полностью зависит от того, как спроектирована ваша система и инфраструктура. Но это то, что я видел в основном следуя.

Несуществующие маршруты : Этот тип страниц в основном обрабатывается только внутри вашего клиентского маршрутизатора, что обеспечивает первую проверку всех маршрутов и если ни один не совпадает, используйте один общий компонент 404Component.

Stati c Маршруты : сначала для этого типа маршрута вы хотите позвонить с сервера, а не из браузера, а затем - на веб-сервер, вы хотите специальные правила для этого типа маршрута, который возвращает к stati c страниц вместо клиентского приложения. Я использовал nginx для такого рода настройки, когда все stati c страницы go для некоторых S3 страниц и другие для моего клиентского маршрутизатора.

Этот тип настройки должен работать

const reload = () => window.location.reload();

<Router>
  // all your client routes..
  ...

  // Your special static routes..
  <Route path="/sitemap.xml" onEnter={reload} />
  <Route path="/something.html" onEnter={reload} />
</Router>

Кроме того, если вы можете поместить атрибут target="_blank" в свой <Link>, он также должен работать

...