Перезапись серверной переменной в IIS 7.5 - PullRequest
5 голосов
/ 29 ноября 2011

У меня есть правило перезаписи, которое меняет переменную сервера на значение субдомена.Это работает на 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 выводится «subdomain».

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

Вывод URL 1 правильный, но вывод URL 2 тоже должен быть "subdomain".

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

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

1 Ответ

11 голосов
/ 29 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...