在 IIS 7.5 中重写服务器变量
Posted
技术标签:
【中文标题】在 IIS 7.5 中重写服务器变量【英文标题】:Rewriting server variable in IIS 7.5 【发布时间】:2012-01-08 18:05:23 【问题描述】:我有一个重写规则,它用子域的值更改服务器变量。 这适用于 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:子域.mydomain.nl
我使用以下代码在 php 中检索变量:
echo $_SERVER['MYVARIABLE'];
对于 URL 1,其输出为“子域”。
在 URL 2 的情况下,它的输出是 ""。
URL 1 的输出是正确的,但是 URL 2 的输出也应该是“子域”。
我已经对这两个请求进行了跟踪,它们都表明规则正在被匹配和执行。
谁能帮帮我?
【问题讨论】:
【参考方案1】:设置自定义服务器变量时,应以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,还添加了 $
以使其真正匹配确切的域名。
【讨论】:
非常感谢您的回答,这就是解决方案。真的很奇怪,我找不到任何记录。 设置请求头,需要添加HTTP_。这已记录在 here 中(请参阅“关于请求标头的说明”)。让我感到困惑的是,为什么设置请求标头总是有效,但设置服务器变量似乎并不总是有效。 @MarcoMiltenburg 看来您对 iis 重写规则有很好的掌握。我是这个领域的新手。如果可能,请查看我的帖子并分享您的宝贵答案。我的帖子链接是***.com/questions/47474674/…以上是关于在 IIS 7.5 中重写服务器变量的主要内容,如果未能解决你的问题,请参考以下文章
httpModules 不适用于 iis 7.5 的 url 重写/扩展少 url(给出错误 500.0)
带有 URL 重写模块的 IIS 7.5 在回发时将 QueryString 参数加倍
在 IIS 7.5 中托管的 .Net Remoting 服务中,如何删除“Server : IIS/7.5”标记表单响应头