Реактивный маршрутизатор с поддержкой домена - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть приложение, которое использует React Router и обслуживает контент по следующим путям.В этом примере у Салли и Санни есть свои собственные страницы по указанным ниже URL-адресам:

  • www.myapp.com / sally
  • www.myapp.com / sunny

Теперь я хотел бы сопоставить каждое из них, когда запрос поступает с другого хоста, как показано ниже:

  • sally.herapp.com <- сопоставить и обслуживать одно и то жеконтент, найденный на www.myapp.com/sally</li>
  • sunny.hisapp.com <- соответствует и отображает контент, найденный на www.myapp.com/sunny</li>

Что бы я хотелНапример, использовать одно и то же приложение, чтобы оно совпало с маршрутами / sally и / sunny на разных поддоменах и доменах.Чтобы было ясно, у меня есть записи DNS CNAME для Салли и Санни на herapp.com hisapp.com соответственно.

Возможно ли это с React Router?Спасибо!

1 Ответ

0 голосов
/ 24 сентября 2019

Этого нельзя сделать с помощью React Router.React Router использует API истории, чтобы выдвигать новые состояния URL, не вызывая обновление страницы.Это делается путем вызова window.history.pushState, который выдаст ошибку, если вы передадите другой источник (поддомен).Из pushState документов ...

Новый URL должен иметь то же происхождение, что и текущий URL;в противном случае pushState () вызовет исключение.

Субдомены обрабатываются браузером как отдельные источники с отдельными CORS ограничениями в целях безопасности, поскольку они обычно указывают на разные машины.

Лучшее, что вы можете сделать, - это использовать некоторый код на стороне сервера (например, конфигурацию nginx) для обратного прокси-запроса с sally.herapp.com на myapp.com/sally.Это будет обслуживать страницу на sally.herapp.com, но все равно потребует обратной передачи на сервер.

У вас также может быть отдельный JS-пакет с собственным экземпляром реагирующего маршрутизатора для каждого субдомена, так как реагирующий маршрутизатор не может установить связь между поддоменами без обратной передачи на сервер, поэтому вы потеряли преимуществав любом случае одностраничное приложение

...