2011-11-29 13 views
5

サブ変数の値でサーバー変数を変更する書き換えルールがあります。 これは私が2つのURLをテストしているsubdomain.mydomain.nl/somethinghereではなくsubdomain.mydomain.nlIIS 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> 

上で動作します: 1:subdomain.mydomain.nl/somethinghere 2:subdomain.mydomain.nlを

は、私は次のコードでPHPの変数を取得:

echo $_SERVER['MYVARIABLE']; 

URL 1の場合には、これの出力は、「サブドメイン」されます。

URL 2の場合、この出力は ""です。

URL 1の出力は正しいですが、URL 2の出力も "サブドメイン"にする必要があります。

私は両方の要求のトレースを実行しており、両方がルールが一致して実行されていることを示しています。

誰でも手伝ってもらえますか?

答えて

10

カスタムサーバー変数を設定する場合は、HTTP_で開始する必要があります。独自のヘッダを追加すると、それは正直に言うとX.

で始まるホストヘッダーを追加するHTTP_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"];でサブドメイン名を取得できるようになりました。

また、.をエスケープするために条件付き正規表現をクリーンアップし、正確なドメイン名と完全一致するように$を追加しました。

+0

ご回答いただきありがとうございます。これが解決策です。本当に奇妙なことに、私はこの文書を見つけることができませんでした。 – user1071188

+2

リクエストヘッダーを設定するには、HTTP_を追加する必要があります。これは、[こちら](http://learn.iis.net/page.aspx/665/url-rewrite-module-20-configuration-reference/#Setting_Server_Variables)(「要求ヘッダーに関する注意」を参照)に記載されています。しかし、なぜ私が困惑しているのは、要求ヘッダーの設定は常に機能するが、サーバー変数の設定は必ずしも機能するとは限らないからです。 –

+0

ありがとうございました。あなたは私の命を救いました! –

関連する問題