IIS URL 重写有子调用问题
IIS URL rewriting has trouble with subcalls
我有两个虚拟机。第一个 (VM1) 是 运行 具有 URL 的 Web 应用程序,如下所示:
VM1/servicedesk/customer/user/login
第二个 (VM2) 现在应该重定向到这个地址 而无需 更改 URL 并且也不允许重定向到根 / 因为那是不同的网络应用程序。这个重写规则相对容易工作:
<rule name="rewriteAll" stopProcessing="true">
<match url=".*" />
<action type="Rewrite" url="http://VM1/servicedesk/customer/user/login" />
</rule>
它只是基本上重写了从 VM2 到特定 VM1 的所有内容 URL。
我面临的问题是此 Web 应用程序对同一 VM1 上的其他地址有许多 Ajax 调用。
例如 VM1/rest/... 或 VM1/s/.... 我真的试图找到每个异常调用并创建规则 before 这个默认重写。但是由于其中一些是嵌套的并且可以更改,所以这不是一个好方法。所以我需要的基本上是在不改变 URL 的情况下重写,不会破坏执行大量嵌套调用的应用程序。
我发现我可以在现有 rewriteAll
规则之前使用以下规则 (redirectRest
) 来重定向子调用 (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 调用重定向到根。但是我发现 Ajax 呼叫没有遵循像 301 这样的重定向。
我有两个虚拟机。第一个 (VM1) 是 运行 具有 URL 的 Web 应用程序,如下所示:
VM1/servicedesk/customer/user/login
第二个 (VM2) 现在应该重定向到这个地址 而无需 更改 URL 并且也不允许重定向到根 / 因为那是不同的网络应用程序。这个重写规则相对容易工作:
<rule name="rewriteAll" stopProcessing="true">
<match url=".*" />
<action type="Rewrite" url="http://VM1/servicedesk/customer/user/login" />
</rule>
它只是基本上重写了从 VM2 到特定 VM1 的所有内容 URL。 我面临的问题是此 Web 应用程序对同一 VM1 上的其他地址有许多 Ajax 调用。 例如 VM1/rest/... 或 VM1/s/.... 我真的试图找到每个异常调用并创建规则 before 这个默认重写。但是由于其中一些是嵌套的并且可以更改,所以这不是一个好方法。所以我需要的基本上是在不改变 URL 的情况下重写,不会破坏执行大量嵌套调用的应用程序。
我发现我可以在现有 rewriteAll
规则之前使用以下规则 (redirectRest
) 来重定向子调用 (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 调用重定向到根。但是我发现 Ajax 呼叫没有遵循像 301 这样的重定向。