url – 在IIS 7.5中重写服务器变量

我有一个重写规则,它使用子域的值更改服务器变量.
这适用于subdomain.mydomain.nl/somethinghere但不适用于subdomain.mydomain.nl

<rule name="Change code" enabled="true" patternSyntax="ECMAScript" stopProcessing="false">
    <match url=".*" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
        <add input="{SERVER_NAME}" pattern="(www\.)?(\w+)\.mydomain\.nl" />
        <add input="{SERVER_NAME}" pattern="^www.mydomain.nl.*" negate="true" />
        <add input="{SERVER_NAME}" pattern="^mydomain.nl.*" negate="true" />
    </conditions>
    <serverVariables>
        <set name="MYVARIABLE" value="{C:2}" />
    </serverVariables>
    <action type="None" />
</rule>

我测试了2个网址:
1:subdomain.mydomain.nl/somethinghere
2:subdomain.mydomain.nl

我使用以下代码在PHP中检索变量:

echo $_SERVER['MYVARIABLE'];

在URL 1的情况下,其输出是“子域”.

在URL 2的情况下,其输出为“”.

URL 1的输出是正确的,但URL 2的输出也应该是“子域”.

我已经运行了两个请求的跟踪,它们都显示规则正在匹配和执行.

谁能帮我?

最佳答案
设置自定义服务器变量时,应使用HTTP_启动它.当您添加自己的标头时,它应该以HTTP_X_开头,以添加以X开头的主机标头.

说实话,我无法解释为什么在某些情况下没有HTTP_它可以工作,但是使用HTTP_它适用于所有场景,而且它也是如何记录的.

<rules>
    <rule name="Change code" enabled="true" patternSyntax="ECMAScript" stopProcessing="false">
        <match url=".*" ignoreCase="true" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
            <add input="{SERVER_NAME}" pattern="(www\.)?(\w+)\.testsite\.nl" />
            <add input="{SERVER_NAME}" pattern="^www\.testsite\.nl$" negate="true" />
            <add input="{SERVER_NAME}" pattern="^testsite\.nl$" negate="true" />
        </conditions>
        <serverVariables>
            <set name="HTTP_X_MYVARIABLE" value="{C:2}" />
        </serverVariables>
        <action type="None" />
    </rule>
</rules>

您现在可以使用echo $_SERVER [“HTTP_X_MYVARIABLE”];获取子域名.

我还清理了条件正则表达式以逃避.s并添加了$以使其真正匹配确切的域名.

转载注明原文:url – 在IIS 7.5中重写服务器变量 - 代码日志