Перезапись переменной сервера в IIS 7.5


У меня есть правило перезаписи, которое изменяет переменную сервера со значением поддомена. Это работает дальше 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 url-адреса: 1: subdomain.mydomain.nl/somethinghere 2. subdomain.mydomain.nl

Я получаю переменную в PHP со следующим кодом:

echo $_SERVER['MYVARIABLE'];

В случае URL-адреса 1 выводом этого является "поддомен".

В случае URL 2, Вывод этого"".

Выходные данные URL 1 является правильным, но вывод URL 2 также должен быть "поддоменом".

Я провел трассировку обоих запросов, и они оба показывают, что правило сопоставляется и выполняется.

Может кто-нибудь помочь мне?

1 5

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, а также добавил $, чтобы он действительно соответствовал точным доменным именам.