4

URL Rewrite と Application Request Routing を使用して、外部 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」が表示されます。その後、リクエストは元のリクエストに書き直され、リクエストは失敗します。

内部リダイレクトの場合、内部サーバーを Web ファームに追加できることは理解していますが、これは外部サーバーには当てはまりません。外部サーバーへの書き換えは可能ですか?その場合、Web ファームを使用して「ARR_WEBFARM_NOT_ROUTED」エラーを回避するにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1

4

参考までに、これは古いことは知っていますが、ここに私の2セントがあります.ARR_WEBFARM_NOT_ROUTEDは、私の場合、リバースプロキシのルールが同じ2つのローカルIISサイトがあり、1つが機能し、1つが機能しなかったため、「誤検知」である可能性があります. 両方のサイトに ARR_WEBFARM_NOT_ROUTED エントリがあったと思います。どちらにも実際の Web ファーム エントリがなく、外部サイトだけだったからです (ただし、書き換え先のサイトはローカル IIS サイトでもありました)。

さらに、OPは「書き直した」と言いましたが、それは私の作業サイトと非作業サイトの両方のログにもありました。つまり、それは喫煙銃ではないかもしれません.

私の問題は、実際にはARRとMVCの間の競合であることが判明しました。MVC の前のパイプラインでは ARR の方が高いと思っていましたが、どういうわけか MVC が突き当たり、元の書き換え前の URL をルーティングしようとするため、404 が発生します。正確な原因はわかりませんが、修正の 1 つは、MVC に書き換え URL を無視するように指示することでした (global.asax.cs または RouteConfig.cs のいずれか)。

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

それが誰かを助けることを願っています。

于 2014-07-23T21:24:47.780 に答える