在IIS 7.5中重写服务器变量

use*_*188 5 iis url url-rewriting

我有一个重写规则,它使用子域的值更改服务器变量.这适用于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>
Run Code Online (Sandbox Code Playgroud)

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

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

echo $_SERVER['MYVARIABLE'];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

谁能帮我?

Mar*_*urg 11

设置自定义服务器变量时,应该使用它来启动它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>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 要设置请求标头,需要添加HTTP_.这是[此处](http://learn.iis.net/page.aspx/665/url-rewrite-module-20-configuration-reference/#Setting_Server_Variables)的文档(请参阅"关于请求标头的注释").令我感到困惑的是,为什么设置请求标头始终有效但设置服务器变量似乎并不总是有效. (3认同)