2017-03-27 81 views
2

我想配置UrlRewrite一個規則,有2個條件:UrlRewrite條件基於自定義HTTP頭

  • HTTP標頭「HTTP_HOST」需要符合特定域(api.contoso.com )
  • 定製HTTP頭「的x應用程序的版本的」需要存在於基於該信息的HTTP請求

,我想重定向到一個不同的版本在噸的API他後端。

問題 規則在第一個條件下的行爲與預期相同。 當HTTP_HOST匹配api.contoso.com時,它會啓動。 但是,它忽略了我的自定義標題「x-app-version」。

假設 所以,恐怕只能在組合來定義從該下拉(HTTP_HOST,REMOTE_ADDRESS,REMOTE_HOST,...)

問題的有限組的預定義的HTTP標頭的UrlRewrite條件 假設是正確的還是應該這樣做? 配置錯誤或其他方法有條件基於自定義的http頭?

<rule name="ARR_test2" enabled="false"> 
    <match url="(.*)" /> 
    <conditions> 
    <add input="{HTTP_HOST}" pattern="api.contoso.com" /> 
    <add input="{x-app-version}" pattern="1" /> 
    </conditions> 
    <action type="Rewrite" url="https://FARM_apiv1/{R:0}" /> 
</rule> 

回答

10

好吧,我發現瞭如何使用自定義HTTP標頭在UrlRewrite條件:

  • 自定義頁眉需要由「HTTP_」開頭。
  • ,以便找回我的自定義標題下劃線

例如爲:代替破折號「X-APP-版」,我可以用「HTTP_x_app_version」。 所以我UrlRewrite的配置應該是這樣的

<rule name="ARR_test2" enabled="false"> 
    <match url="(.*)" /> 
    <conditions> 
    <add input="{HTTP_HOST}" pattern="api.contoso.com" /> 
    <add input="{HTTP_x_app_version}" pattern="1" /> 
    </conditions> 
    <action type="Rewrite" url="https://FARM_apiv1/{R:0}" /> 
</rule> 

它實際上提到的文檔中很清楚: https://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx