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并且还添加了一个$以使其真正匹配确切的域名.
| 归档时间: |
|
| 查看次数: |
6790 次 |
| 最近记录: |