4

我正在尝试使用 URL 重写和应用程序请求路由来重写到外部 URL。我设置了以下规则:

<rewrite>
  <rules>
    <rule name="RewriteExternal" enabled="true" stopProcessing="true">
      <match url="patternToMatch/(.*)" />
      <action type="Rewrite" url="http://100.100.100.100/{R:1}" appendQueryString="false" logRewrittenUrl="false" />
    </rule>
  </rules>
</rewrite>

在规则中,“patternToMatch”是我试图匹配的模式,而 100.100.100.100 服务器是我试图重写的外部服务器(在我们的防火墙之外)。我已打开日志记录并看到模式匹配,URL 被适当地重写,但随后我看到 IP 地址为 100.100.100.100 的“ARR_WEBFARM_NOT_ROUTED”。然后该请求被重写回原始请求并且请求失败。

我知道对于内部重定向,我可以将内部服务器添加到网络场,但这不适用于外部服务器。是否可以重写到外部服务器?如果是这样,我如何绕过使用网络场并避免“ARR_WEBFARM_NOT_ROUTED”错误?

谢谢你的帮助。

4

1 回答 1

4

仅供参考,我知道这很旧,但这是我的两分钱:ARR_WEBFARM_NOT_ROUTED可能是“误报”,因为在我的情况下,我有两个本地 IIS 站点,它们的反向代理规则相同,一个有效,一个无效。我认为这两个站点都有 ARR_WEBFARM_NOT_ROUTED 条目,因为它们都没有任何实际的网络场条目,只有外部站点(尽管我正在重写的站点也是本地 IIS 站点)。

此外,OP 说“重写”,这在我的工作和非工作站点日志中也是如此,这意味着它也可能不是确凿的证据。

原来我的问题实际上是 ARR 和 MVC 之间的冲突。我会认为 ARR 在 MVC 之前的管道中更高,但不知何故 MVC 插手并尝试路由原始的预重写 URL,从而导致 404。我不确定确切的原因,但一种解决方法是告诉 MVC 忽略重写 URL(在 global.asax.cs 或 RouteConfig.cs 中):

routes.IgnoreRoute("rewrite_path_here/{*pathInfo}");

希望对某人有所帮助。

于 2014-07-23T21:24:47.780 回答