url重写为外部URL

时间:2012-10-11 20:24:58

标签: url-rewriting

我正在尝试使用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被重写,但随后我看到“ARR_WEBFARM_NOT_ROUTED”与100.100.100.100 IP地址。然后将请求重写回orignal请求,请求失败。

我理解,对于内部重定向,我可以将内部服务器添加到Web场,但这不适用于外部服务器。是否可以重写到外部服务器?如果是这样,我如何使用Web场并避免出现“ARR_WEBFARM_NOT_ROUTED”错误?

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

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

另外OP说“重写”,这也是我的工作和非工作网站的日志,这意味着它可能也不是一支冒烟的枪。

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

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

希望能有所帮助。