【问题标题】:url rewrite to an external urlurl 重写为外部 url
【发布时间】:2012-10-11 20:24:58
【问题描述】:

我正在尝试使用 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”错误?

感谢您的帮助。

【问题讨论】:

    标签: url-rewriting


    【解决方案1】:

    仅供参考,我知道这很旧,但这是我的两分钱: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}");
    

    希望对某人有所帮助。

    【讨论】:

    • 正确。我遇到了同样的问题,确实是 MVC 拦截了重写的 URL 并提供了 404!添加了忽略及其现在的工作。但是,为什么 URL 重写规则是在服务器级别的,所以它永远不应该到达站点级别来肯定地评估这一点?再次感谢您发布此内容,解决了我的问题
    • 注意,这确实帮助了我,但是如果你使用 MVC 区域,那么你必须确保这是在 RegisterArea() 方法中完成的,而不是在 RouteConfig 的 RegisterRoutes() 方法中:public override void RegisterArea(AreaRegistrationContext context) { context.Routes.IgnoreRoute("blog/{*pathInfo}"); ... }
    • 这帮助我终于在 Umbraco 中整理了一个 URL 重写
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多