0

タイトルが明確でない場合はお詫びします。基本的に、ポート 80 でリッスンする Web プロキシがあり、IIS で URL 書き換えを設定しています (web.config のルールは次のとおりです)。

http://example.com/api/blah/blah ->
http://example.com:8095/api/blah/blah

  <rule name="api-example" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
     <match url="^.*/api/.*$" />
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
     <action type="Rewrite" url="http://localhost:8095/{R:0}" appendQueryString="true" logRewrittenUrl="false" />
  </rule> 

問題なく動作します。localhost:8095 を直接リクエストしても動作します

しかし、リクエストが直接リクエストされたのか、それとも URL 書き換えモジュールを介してリクエストされたのかを認識できるようにしたいと考えています。

私の考えは、IISでURLが書き換えられたときにクエリ文字列をURLに追加して、クエリ文字列が存在するかどうかを確認し、そうでない場合はURLの書き換えを介して確認できるようにすることです。

例:

http://example.com/api/blah/blah?from=proxy -> http://example.com:8095/api/blah/blah?from=proxy

http://example.com/api/blah/blah?existing_query_string=blah&from=proxy -> http://example.com:8095/api/blah/blah?existing_query_string=blah&from=proxy

どうすればこれを達成できますか?またはそれを行う他の方法はありますか?

どうもありがとう

4

2 に答える 2

1

私は最終的に、IISがURLの書き換えを行うときにクエリ文字列を追加するという独自のソリューションに行きました。URLにクエリ文字列arr = 1を追加するのに十分なほど賢いUrl書き換えモジュールは、URLに既にクエリ文字列があるかどうかは関係ありません。

次に、クエリ文字列に arr=1 が含まれているかどうかを確認するコードを追加します。含まれている場合は、URL の書き換えによってリクエストが送信されます

<rule name="api-example" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
     <match url="^.*/api/.*$" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{QUERY_STRING}" pattern="(.*)" negate="false" />
      </conditions>
     <action type="Rewrite" url="http://localhost:8095/{R:0}?arr=1" appendQueryString="true" logRewrittenUrl="false" />
  </rule> 
于 2013-12-13T15:33:51.497 に答える