如何在服务器变量 IIS URL 重写中传递带下划线的 Header?

How to pass Header with underscore in Server Variable IIS URL Rewrite?

我正在将我的站点重写为 diff url,我必须通过 header。

所以一切都很好。但是一个 header 名字有下划线 (_).

    <rewrite>
        <rules>
            <rule name="ReverseProxyInboundRule2" patternSyntax="Wildcard" stopProcessing="false">
                <match url="*core*" />
                <action type="Rewrite" url="http://xxxxxxx/yyyyy/core{R:2}" logRewrittenUrl="true" />
                <serverVariables>
                    <set name="HTTP_name" value="name" />
                    <set name="HTTP_address" value="address" />
                    <set name="HTTP_phone_number" value="1234567890" />
                </serverVariables>
            </rule>
        </rules>
        <outboundRules>
            <preConditions>
                <preCondition name="ResponseIsHtml1">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
            </preConditions>
        </outboundRules>
    </rewrite>  

所有下划线(phone_number)都会转换为连字符(phone-number),所以要求的header没有通过。

我必须通过phone_number

请帮我解决这个问题。

终于找到答案了。我必须通过 HEADER_phone_number .

refer 了解更多详情。

HEADER_HeaderName(IIS 5.1 及更早版本:此服务器变量不可用):

存储在 header 中的值。除了在此 table 中列出的那些之外的任何 header 必须以 "HEADER_" 开头,以便 ServerVariables collection 检索其值。这对于检索自定义 header 很有用。 笔记: 与 HTTP_ 不同,HEADER_ 中的所有字符都被解释为 as-is。例如,如果您指定 HEADER_MY_HEADER,服务器将搜索名为 MY_HEADER.

的请求 header

HTTP_HeaderName :

存储在 header 中的值。除了在此 table 中列出的那些之外的任何 header 必须以 "HTTP_" 开头,以便 ServerVariables collection 检索其值。这对于检索自定义 header 很有用。 笔记: 服务器将任何下划线 (_) 字符解释为实际 header 中的破折号。例如,如果您指定 HTTP_MY_HEADER,服务器将搜索名为 MY-HEADER.

的请求 header