2012-10-11 38 views
2

我正尝试使用URL重写和应用程序请求路由来重写为外部URL。我已经设置了以下规则:将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地址。该请求然后被重写回原始请求,并且请求失败。

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

感谢您的任何帮助。

回答

2

FYI我知道这是旧的,但这里是我的两分钱: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}"); 

希望帮助别人。

+0

现货。我有同样的问题,它确实是MVC拦截重写的URL并提供404!现在增加了忽略和它的工作。尽管如此,URL重写规则是在服务器级别的,所以它永远不应该到站点级别来肯定地评估它。 再次感谢发布这个,排序我的问题 – LDJ