首页 > 解决方案 > IIS URL 重写存在子调用问题

问题描述

我有两个虚拟机。第一个(VM1)正在运行一个具有如下 URL 的 Web 应用程序:

VM1/服务台/客户/用户/登录

第二个(VM2)现在应该在更改 URL 的情况下重定向到该地址,并且也不允许重定向到根 / 因为这是一个不同的 Web 应用程序。使用此重写规则可以相对轻松地工作:

<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/.... 我真的试图找到每个异常调用并在此默认重写之前创建一个规则。但由于其中一些是嵌套的并且可以更改,这不是一个好方法。所以我需要的基本上是在不更改 URL 的情况下重写不会破坏执行大量嵌套调用的应用程序。

标签: iisurl-rewritingurl-rewrite-module

解决方案


我发现我可以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 时,第二条规则适用,我被重写为 web 应用程序。托管在那里的应用程序将调用例如 VM1/rest 触发第一条规则并将 Ajax 调用重定向到根。但是我发现 Ajax 调用没有遵循像 301 这样的重定向。


推荐阅读