2011-11-29 19 views
5

में सर्वर वैरिएबल को रिवाइट करना मेरे पास एक पुनर्लेखन नियम है, जो एक सबडोमेन के मान के साथ एक सर्वर चर बदलता है। यह subdomain.mydomain.nl/somethinghere पर काम करता है, लेकिन नहीं subdomain.mydomain.nl पर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> 

2 यूआरएल का परीक्षण किया है: 1: subdomain.mydomain.nl/somethinghere 2: subdomain.mydomain.nl

मैं निम्नलिखित कोड के साथ PHP में चर को पुनः प्राप्त:

echo $_SERVER['MYVARIABLE']; 

यूआरएल 1 के मामले में, इस के उत्पादन में किया जाता है "के उप"।

यूआरएल 2 के मामले में, इसका आउटपुट "" है।

यूआरएल 1 का आउटपुट सही है, लेकिन यूआरएल 2 का आउटपुट "सबडोमेन" होना चाहिए।

मैंने दोनों अनुरोधों का एक निशान चलाया है, और वे दोनों दिखाते हैं कि नियम मिलान और निष्पादित किया जा रहा है।

क्या कोई मेरी मदद कर सकता है?

उत्तर

10

जब आप कस्टम सर्वर चर सेट करते हैं, तो आपको इसे HTTP_ से शुरू करना चाहिए। आप अपने खुद के हैडर जोड़ते हैं तो वह एक मेजबान हैडर एक एक्स के साथ शुरू

ईमानदारी से कहूं तो मैं सच में व्याख्या नहीं कर सकते कारण है कि यह कुछ परिस्थितियों में HTTP_ बिना काम करता है जोड़ने के लिए HTTP_X_ साथ शुरू करना चाहिए, लेकिन 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

धन्यवाद आदमी। तुमने मेरी जान बचाई! –