Как развернуть приложение React с помощью базового пути nginx

#reactjs #nginx

#reactjs #nginx

Вопрос:

все!

Я пытаюсь развернуть приложение react для производства.

Мой случай.

В рабочей среде мое приложение будет иметь динамический базовый путь, и я изменяю его при сборке.

Пример:

  • example.com/basepath
  • example.com/basepath2

мой package.json

 ...
"scripts": {
 "build:basepath": "PUBLIC_URL=basepath react-app-rewired build",
 "build:basepath2": "PUBLIC_URL=basepath2 react-app-rewired build",
}
  

В моих маршрутах задается базовое имя с динамическим базовым путем

мой файл nginx.conf

 server {
    listen       80;
    server_name  _;

    error_page 400 404 405 =200 @40*_json;

    location @40*_json {
      default_type application/json;
      return 200 '{"code":"1", "message": "Not Found"}';
    }

    location ~ /basepath{
     root   /usr/share/nginx/html;
     try_files $uri /basepath/index.html;
    }

}
  

Я могу получить доступ к приложению с помощью example.com/basepath . Его работа

Если я получу доступ example.com/basepath / получить пустую страницу

доступ example.com/basepath , фрагменты загружаются в example.com/basepath/statics/chank ….

https://i.imgur.com/OHvMOeH.jpg

доступ example.com/basepath / url-адрес фрагментов неверен example.com/basepath/basepath/statics/chank ….

https://i.imgur.com/7WyAr7i.png

Когда маршруты изменяются ссылками на приложения, все в порядке

https://i.imgur.com/BBUfZWL.jpg

Я не знаю, есть ли ошибка в nginx или в маршрутизаторе react

Есть идея?

извините за мой английский, и это моя первая тема

Ответ №1:

Вы пробовали использовать HashRouter вместо BrowserRouter?

Комментарии:

1. это проверенный ответ, поэтому он, вероятно, правильный в данном случае, но это помогло бы будущему пользователю, если бы вы немного подробнее объяснили, почему это изменение решает проблему 🙂