基于自定义HTTP标头

时间:2017-03-27 15:06:26

标签: iis url-rewriting url-rewrite-module

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

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

根据此信息,我想在后端重定向到不同版本的API。

问题 该规则在第一个条件下表现如预期。 当HTTP_HOST与api.contoso.com匹配时,它会启动。 但是,它会忽略我的自定义x-app-version标题。

假设 因此,我担心UrlRewrite条件只能与下拉列表中的有限预定义HTTP标头集合定义(HTTP_HOSTREMOTE_ADDRESSREMOTE_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>

1 个答案:

答案 0 :(得分:17)

好的,我发现了如何在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>

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