При перезаписи URL в IIS возникли проблемы с вызовами - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть две виртуальные машины. Первый (VM1) запускает веб-приложение с таким URL-адресом:

VM1 / servicedesk / customer / user / login

Второй (VM2) должен теперь перенаправляйте на этот адрес без изменения URL-адреса, а также не разрешаете перенаправлять на root /, поскольку это другое веб-приложение. Это правило относительно легко работает с этим правилом перезаписи:

<rule name="rewriteAll" stopProcessing="true">
 <match url=".*" />
 <action type="Rewrite" url="http://VM1/servicedesk/customer/user/login" />
</rule>

В основном оно переписывает все, начиная с VM2 и заканчивая указанным URL-адресом c VM1. Проблема, с которой я сталкиваюсь, состоит в том, что у этого веб-приложения есть много вызовов Ajax на другие адреса на той же VM1. Например, VM1 / rest / ... или VM1 / s / .... Я действительно пытался найти каждый исключительный вызов и создать правило до этого перезаписи по умолчанию. Но поскольку некоторые из них являются вложенными и могут быть изменены, это не очень хороший подход. Так что мне в основном нужно переписать без изменения URL, что не нарушает работу приложения, которое выполняет много вложенных вызовов.

1 Ответ

0 голосов
/ 05 февраля 2020

Я обнаружил, что могу использовать следующее правило (redirectRest) перед существующим правилом rewriteAll для перенаправления подвызов (VM1 / rest /..).

<rule name="redirectRest" stopProcessing="true">
 <match url="/.*" />
 <action type="Redirect" url="http://VM1/{R:0}" />
</rule>
<rule name="rewriteAll" stopProcessing="true">
 <match url=".*" />
 <action type="Rewrite" url="http://VM1/servicedesk/customer/user/login" />
</rule>

Так что в основном, когда я При вызове VM1 применяется второе правило, и я переписываюсь в веб-приложение. Размещенное там приложение будет вызывать, например, VM1 / rest, что вызывает первое правило, и перенаправлять вызовы Ajax на root. Но я обнаружил, что Ajax вызовы не следуют за перенаправлением как 301.

...