8

ポート 8080 でセルフホステッド API を実行しています。アプリケーション「MyApiTestsite」を追加しました。/api/ または /signalr/ へのすべてのリクエストをポート 8080 に転送したいと思います。

http://mycompany/MyApiTestsite           -> untouched
http://mycompany/MyApiTestsite/signalr/* -> http://mycompany:8080/signalr/*
http://mycompany/MyApiTestsite/api/*     -> http://mycompany:8080/api/*

私はすでにインストールしていARRます(これは必要ですか?)とURL Rewrite.

これまでの私のルールは次のとおりです(SignalRの場合):

<rule name="Rewrite SignalR to port 8080" patternSyntax="Wildcard" stopProcessing="true">
  <match url="signalr/*" />
  <serverVariables>
    <set name="SERVER_PORT" value="8080" />
  </serverVariables>
  <action type="Rewrite" url="{R:0}" appendQueryString="true" logRewrittenUrl="false" />
</rule>

ログファイルを確認したところ、ルールが一致しました。ただし、まったく機能しません。

  • RelativePath (私のアプリケーション) を取り除く方法がわかりませんMyApiTestsite
  • ログを確認すると、ポートは置き換えられませんでした

ログ:

RULE_EVALUATION_END RuleName="Rewrite SignalR to port 8080", RequestURL="MyApiTestsite/signalr/hubs", QueryString="", StopProcessing="true", Succeeded="true"

URL_REWRITE_END RequestURL="/MyApiTestsite/signalr/hubs"

GENERAL_CHILD_REQUEST_START SiteId="4", RequestURL="http://mycompany:80/MyApiTestsite/signalr/hubs", RequestVerb="GET", RecursiveLevel="1"

更新:この投稿 に従って試してみました。しかし、それでもうまくいきません。URL は適切に見えますが、MvcHandler が引き継ぎ、404 を返します。

URL_REWRITE_END RequestURL="http://mycompany:8080/signalr/hubs"

USER_SET AuthType=""、UserName=""、SupportsIsInRole="true"

HANDLER_CHANGED
OldHandlerName="ExtensionlessUrlHandler-Integrated-4.0"、NewHandlerName="System.Web.Mvc.MvcHandler"、NewHandlerModules="ManagedPipelineHandler"、NewHandlerScriptProcessor=""、NewHandlerType="System.Web.Mvc.MvcHandler、System.Web.Mvc 、バージョン=5.1.0.0"

GENERAL_SEND_CUSTOM_ERROR HttpStatus="404"、HttpSubStatus="4"、FileNameOrURL="404.htm"

更新 2:

これが私がやりたいことの写真です...

ここに画像の説明を入力

Update 3 今回はServer Farms代わりに使ってみました。URL が変更されたはずなのに、元の URL に戻ってしまった:

ARR_WEBFARM_ROUTED WebFarm="mycompany API", Algorithm="LeastRequests"
HANDLER_CHANGED OldHandlerName="", NewHandlerName="ApplicationRequestRoutingHandler", NewHandlerModules="ApplicationRequestRouting", NewHandlerScriptProcessor="", NewHandlerType=""
ARR_SERVER_ROUTED RoutingReason="LoadBalancing", Server="mycompany", State="Active", TotalRequests="1", FailedRequests="0", CurrentRequests="1", BytesSent="0", BytesReceived="0", ResponseTime="0"
GENERAL_SET_REQUEST_HEADER HeaderName="Max-Forwards", HeaderValue="10", Replace="true"
GENERAL_SET_REQUEST_HEADER HeaderName="X-Forwarded-For", HeaderValue="xxx.xx.xx.xxx:52327", Replace="true"
GENERAL_SET_REQUEST_HEADER HeaderName="X-ARR-SSL", HeaderValue="", Replace="true"
GENERAL_SET_REQUEST_HEADER HeaderName="X-ARR-ClientCert", HeaderValue="", Replace="true"
GENERAL_SET_REQUEST_HEADER HeaderName="X-ARR-LOG-ID", HeaderValue="f8exxxc2-7a6d-4cf6-a3c6-ecde245a0d80", Replace="true"
GENERAL_SET_REQUEST_HEADER HeaderName="Connection", HeaderValue="", Replace="true"
//>>>>>now it gets changed back!!! Why????<<<<<<
URL_CHANGED OldUrl="http://mycompany API/signalr/hubs", NewUrl="/MyApiTestsite/signalr/hubs"
4

2 に答える 2

0

次のURL 書き換えルールを構成します。

Requested URL: Matches the pattern
Using: Regular Expressions
Pattern: MyApiTestsite/(signalr/.*)
Action: Rewrite
Rewrite URL: http://mycompany:8080/{R:1}

編集:{R:1}この場合、最初にキャプチャされた正規表現グループと一致し(signalr/.*)ます。そうでない場合は{R:0}、一致した相対 URL 全体が配置されます。詳細については、 IIS URL Rewrite {R:N} の説明を参照してください。

于 2014-05-12T07:31:15.017 に答える
0

これを試してください:これはうまくいきます!

<rewrite>
        <rewriteMaps>
            <rewriteMap name="root">
                <add key="/root/" value="/" />
            </rewriteMap>
        </rewriteMaps>
        <rules>
            <clear />
            <rule name="MyRedirect" stopProcessing="true">
                <match url="^MYApiTestsite/(api|signalr)(/.*)?" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                <action type="Redirect" url="http://mycompany:8080/{R:1}{R:2}" />
            </rule>
        </rules>
    </rewrite>

GUIを使いたいなら ここに画像の説明を入力

于 2015-03-18T15:41:57.217 に答える