【问题标题】:IIS URL rewriting has trouble with subcallsIIS URL 重写存在子调用问题
【发布时间】:2020-02-05 19:16:11
【问题描述】:

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

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

第二个(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 的情况下重写不会破坏执行大量嵌套调用的应用程序。

【问题讨论】:

  • 1) 找到所有可能的 URL 模式。 2) 分析并决定您必须编写哪些规则。由于上面没有列出足够的信息,你必须自己去挖掘答案。
  • 原则上已经回答了我的问题。是的,我当然可以为从该地址调用的所有异常和地址创建规则,但我认为使用 1-2 条规则可能会有一个技巧。缺少哪些信息?

标签: iis url-rewriting url-rewrite-module


【解决方案1】:

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

【讨论】:

  • 如果您的问题得到解决,那么我请求您将建议标记为答案。这将帮助面临同样问题的其他人。
猜你喜欢
  • 2012-06-18
  • 2014-10-23
  • 1970-01-01
  • 2011-10-05
  • 2016-11-03
  • 2019-10-26
  • 2016-06-06
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多