Конфигурация обратного прокси-сервера Apache не работает с местоположением / # /

Я пытаюсь получить обратный прокси-сервер apache 2.4 (RHEL 7.7), работающий с приложением, имеющим жестко заданные пути, что делает мою конфигурацию обратного прокси-сервера весьма сложной. Эта ссылка на ошибку сервера () Как правильно обрабатывать относительные URL-адреса с помощью обратного прокси-сервера ) было замечательно, особенно подход к решению № 3 по размещению нескольких мест (которые были жестко запрограммированы). Мой прокси-сервер запускает пути, чтобы различать приложения (www.example. com / app1 и www.example.com/app2). В этом примере / app2 жестко запрограммировал несколько каталогов, таких как / static и / api. Размещение этих местоположений с помощью ProxyPass и ProxyPassReverse отлично сработало, и сайт работает. .

Тем не менее, они также жестко запрограммированы / # / по какой-то причине, и я вижу их в href-ссылках в определенных местах. Итак, я следовал шаблону и определил местоположение для / # /. Однако это не работает . По какой-то причине, когда я нажимаю эту ссылку, она не направляет ее на app2.internal.examp. le.com, но вместо этого обслуживает мою домашнюю страницу, которая отвечает по адресу www.example.com/. Я вижу, что в URL-адресе отображается www.example.com/#/SOMEWHERE, но он явно не попадает в app2. Файл конфигурации находится ниже. / # / - это особое место, которое нельзя использовать? Есть ли какие-то решения для этого? Заранее спасибо.

<Location /app2/>
  ProxyPass https://app2.internal.example.com/
  ProxyPassReverse https://app2.internal.example.com/
  Header add referer "https://app2.internal.example.com/"
  RequestHeader set referer "https://app2.internal.example.com/"
</Location>

<Location /static/>
  ProxyPass https://app2.internal.example.com/static/
  ProxyPassReverse https://app2.internal.example.com/static/
  Header add referer "https://app2.internal.example.com/"
  RequestHeader set referer "https://app2.internal.example.com/"
</Location>

<Location /api/>
  ProxyPass https://app2.internal.example.com/api/
  ProxyPassReverse https://app2.internal.example.com/api/
  Header add referer "https://app2.internal.example.com/"
  RequestHeader set referer "https://app2.internal.example.com/"
</Location>

<Location /#/>
  ProxyPass https://app2.internal.example.com/#/
  ProxyPassReverse https://app2.internal.example.com/#/
  Header add referer "https://app2.internal.example.com/"
  RequestHeader set referer "https://app2.internal.example.com/"
</Location>
1
задан 10 August 2019 в 02:45
1 ответ

# в URL обозначает фрагмент URL-адреса, часть URL-адреса, указывающая место в документе, к которому браузер будет прокручивать после загрузки документа.

Некоторые библиотеки JavaScript злоупотребляли фрагментом URL-адреса для передачи информации на стороне клиента для поддержки различных функций одностраничные приложения. Это уже не в моде (и никогда не было очень хорошей идеей), и такие приложения необходимо обновить, чтобы использовать History API и изменить эти URL-адреса соответствующим образом, чтобы больше не использовать фрагменты. Ваши разработчики должны сделать это несколько лет назад.

Есть несколько причин, по которым это было плохой идеей с самого начала, но, что наиболее важно для вашей ситуации, фрагмент URL-адреса строго клиентской стороне и никогда не передается на сервер. Если у вас есть URL http://www.example.com/#/ , путь будет / , и это все, что видит сервер. Он никогда не видит # / , поскольку это только на стороне клиента. В обычном HTTP нет способа отправить его на сервер, поэтому вы не можете сопоставить его в Location . Или что-нибудь еще.

2
ответ дан 3 December 2019 в 20:06

Теги

Похожие вопросы