2011-11-29 16 views
5

Mam regułę przepisywania, która zmienia zmienną serwera o wartość poddomeny. Działa to na subdomain.mydomain.nl/somethinghere ale nie na subdomain.mydomain.nlPrzepisywanie zmiennej serwera w IIS 7.5

<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> 

Ja testowałem 2 adresami: 1: subdomain.mydomain.nl/somethinghere 2: subdomain.mydomain.nl

odzyskać zmienną w PHP z następującego kodu:

echo $_SERVER['MYVARIABLE']; 

W przypadku zawartości 1, wyjście to jest „subdomeny”.

W przypadku adresu URL 2 wynik to "".

Dane wyjściowe adresu URL 1 są poprawne, ale dane wyjściowe adresu URL 2 również powinny być "subdomeną".

Uruchomiłem ślad obu żądań, a oba pokazują, że reguła jest dopasowywana i wykonywana.

Czy ktoś może mi pomóc?

Odpowiedz

10

Po ustawieniu niestandardowej zmiennej serwera należy ją uruchomić pod numerem HTTP_. Gdy dodać własny nagłówek, należy zacząć HTTP_X_ dodać nagłówek hosta począwszy X.

Szczerze mówiąc, nie mogę wyjaśnić, dlaczego to działa bez HTTP_ w niektórych scenariuszach, ale z HTTP_ to działa we wszystkich scenariuszach i to także w jaki sposób jest to udokumentowane.

<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> 

Teraz można uzyskać nazwę subdomeny z echo $_SERVER["HTTP_X_MYVARIABLE"];.

Oczyściłem również twoje warunkowe wyrażenia regularne, aby uciec przed . s, a także dodałem $, aby naprawdę pasowało do dokładnych nazw domen.

+0

Dziękuję bardzo za odpowiedź, to jest rozwiązanie. Naprawdę dziwne, że nie mogłem znaleźć tego udokumentowanego czegokolwiek. – user1071188

+2

Aby ustawić nagłówki żądań, konieczne jest dodanie adresu HTTP_. Jest to udokumentowane [tutaj] (http://learn.iis.net/page.aspx/665/url-rewrite-module-20-configuration-reference/#Setting_Server_Variables) (patrz "Uwaga o nagłówkach zgłoszeń"). Zastanawia mnie również, dlaczego ustawienie nagłówka żądania zawsze działa, ale ustawienie zmiennej serwera nie zawsze działa. –

+0

Dzięki człowieku. Uratowałeś mi życie! –

Powiązane problemy