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