【问题标题】:Rewriting server variable in IIS 7.5在 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 的输出也应该是“子域”。

我已经对这两个请求进行了跟踪,它们都表明规则正在被匹配和执行。

谁能帮帮我?

【问题讨论】:

    标签: url iis url-rewriting


    【解决方案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 重写规则有很好的掌握。我是这个领域的新手。如果可能,请查看我的帖子并分享您的宝贵答案。我的帖子链接是stackoverflow.com/questions/47474674/…
    猜你喜欢
    • 2014-09-30
    • 2011-03-20
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2013-01-21
    • 1970-01-01
    相关资源
    最近更新 更多