我正在尝试使用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”错误?
感谢您的帮助。
答案 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}");
希望能有所帮助。