2013-12-11 86 views
0

道歉如果標題不清楚,基本上我有一個Web代理偵聽端口80,並在IIS上設置了URL重寫(web.config上的規則爲8095直接如何識別請求是否來自URL重寫模塊

,但我也想成爲: - 以下),但它確實

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> 

它工作得很好,沒有任何問題,也當我請求本地主機的工作原理能夠識別請求是直接請求還是通過URL重寫模塊。

我的想法是,在查詢字符串添加到URL,當URL大幹快上IIS rewrited,這樣我可以檢查,如果再查詢字符串存在,它是通過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

如何ç我做到了這一點?或者還有其他方法可以做到嗎?

非常感謝

回答

0

您可以嘗試訪問

Request.ServerVariables["HTTP_X_ORIGINAL_URL"] 

,並把它比作Request.Url.PathAndQuery。或者,

Request.RawUrl 

還應該包含原始URL。

+0

您好我進行了嘗試,並HTTP_X_ORIGINAL_URL節目我只在url重寫前的原始路徑和查詢字符串,但沒有域值,這將無濟於事,如果我轉發到另一個Web服務器具有完全相同的路徑和查詢字符串。原始網址根本沒有幫助。 – Ming

1

我最終去了我自己的解決方案,這是IIS添加一個查詢字符串url重寫 和Url重寫模塊足夠聰明以追加查詢字符串arr = 1到網址無關緊要的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>