2011-11-29 150 views
5

我有一个重写规则,它使用子域的值更改服务器变量。 这部作品subdomain.mydomain.nl/somethinghere但不能在subdomain.mydomain.nl在IIS 7.5中重写服务器变量

<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的输出应该是“子域”了。

我已经运行两个请求的痕迹,他们都表明,规则被匹配和执行。

任何人都可以帮助我吗?

回答

10

当您设置自定义服务器变量,你应该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,并且还添加了$以使其确实匹配确切的域名。

+0

非常感谢您的回答,这就是解决方案。真奇怪,我无法找到任何记录。 – user1071188

+2

要设置请求标头,需要添加HTTP_。这是记录[这里](http://learn.iis.net/page.aspx/665/url-rewrite-module-20-configuration-reference/#Setting_Server_Variables)(请参阅“关于请求标题的注意事项”)。然而,我也困惑的是为什么设置请求标题总是有效,但设置服务器变量似乎并不总能奏效。 –

+0

谢谢你。你救了我的命! –