UrlRewrite条件基于自定义HTTP标头

use*_*498 6 iis url-rewriting url-rewrite-module

我正在尝试在UrlRewrite中配置一个有两个条件的规则:

  • HTTP标头" HTTP_HOST "需要匹配某个域(api.contoso.com)
  • 自定义HTTP标头" x-app-version "需要出现在HTTP请求中

根据这些信息,我想在后端重定向到不同版本的api.

问题 规则在第一个条件下的行为与预期相同.当HTTP_HOST与api.contoso.com匹配时,它就会启动.但是,它会忽略我的自定义标题"x-app-version".

假设 因此,我担心UrlRewrite条件只能与下拉列表中有限的一组预定义HTTP头一起定义(HTTP_HOST,REMOTE_ADDRESS,REMOTE_HOST,...)

问题 假设是正确的还是应该是可能的?配置或其他方法中的错误是否有基于自定义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>
Run Code Online (Sandbox Code Playgroud)

use*_*498 21

好的,我发现了如何在UrlRewrite条件中使用自定义HTTP标头:

  • 自定义标头需要以"HTTP_"开头.
  • 用下划线代替短划线

例如:为了检索我的自定义标题"x-app-version",我可以使用"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>
Run Code Online (Sandbox Code Playgroud)

实际上在文档中提到的很清楚:https: //msdn.microsoft.com/en-us/library/ms524602(v = vs.90).aspx