【问题标题】:UrlRewrite condition based on custom HTTP header基于自定义 HTTP 标头的 UrlRewrite 条件
【发布时间】:2017-08-20 08:59:00
【问题描述】:

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

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

基于此信息,我想在后端重定向到不同版本的 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>

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 根据文档,您可以使用HEADER_x-app-version。使用比 5.1 更新的 IIS 时。 (我使用pattern=".*" 对自定义标头执行简单的检查。)
    • 实际上,验证自定义标头是否存在的模式应该是.+(一个或多个)而不是.*(零个或多个)。
    猜你喜欢
    • 2017-07-08
    • 2019-01-18
    • 2020-12-16
    • 1970-01-01
    • 2012-01-17
    • 2012-09-22
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多