2012-02-02 14 views
13

मैं अपने web.config फ़ाइल में इन दो नियमों का उपयोग कर रहा:आईआईएस URL पुनर्लेखन: HTTPS के लिए विहित होस्ट नाम और HTTP लागू अनुप्रेषित

<rule name="Enforce canonical hostname" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions> 
     <add input="{HTTP_HOST}" negate="true" pattern="^www\.example\.com$" /> 
     </conditions> 
     <action type="Redirect" url="https://www.example.com/{R:1}" redirectType="Permanent" /> 
    </rule> 
    <rule name="HTTP to HTTPS redirect" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions> 
     <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
     </conditions> 
     <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> 
    </rule> 

इन दो नियमों के साथ मैं निम्नलिखित पुनर्निर्देशन काम करने के लिए मिलता है:

  1. http://www.example.com --->https://www.example.com
  2. http://example.com--->https://www.example.com
  3. https://example.com ---> इस फिर से करने में विफल रहता सीधे https://www.example.com ... क्यों?
+0

बस की जाँच, आप निश्चित रूप से सही ऊपर आइटम 2 में पाठ मिल गया है - कि http://mysite.com रीडायरेक्ट सफलतापूर्वक http * s *: //www.mySite.com पर? –

+0

वे मामले संवेदनशील नहीं हैं? - कुछ स्थानों पर आपने MySite का उपयोग किया है, दूसरों में mysite (उदाहरण के लिए आइटम 3 में)। –

+0

मैंने अपने वास्तविक पते के बजाय www.mysite.com पते का उपयोग किया :) –

उत्तर

22

सुनिश्चित नहीं है कि आप अभी भी उत्तर मांग रहे हैं लेकिन यहां जाता है। कुछ खोज, और परीक्षण और त्रुटि के बाद, मुझे निम्नलिखित नियमों के साथ सफलता मिली। मेरे सामने आने वाले अधिकांश उदाहरण पैटर्न मिलान के संबंध में अनावश्यक रूप से जटिल हैं और अन्य चर लागू करते हैं जो नियमों को इरादे से काम करने से रोकते हैं। नीचे दिए गए नियमों किसी भी वेबसाइट के लिए लागू किया जा सकता है, और इसलिए यह हमेशा एक सीधी प्रतिलिपि-और-चिपकाएं काम होना चाहिए कुछ भी नहीं हार्ड-कोडेड है:

<rule name="Redirect to WWW" stopProcessing="true" > 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTP_HOST}" pattern="^www\." negate="true"/> 
    </conditions> 
    <action type="Redirect" url="https://www.{HTTP_HOST}{HTTP_URL}" redirectType="Permanent" appendQueryString="false" /> 
</rule> 
<rule name="Redirect to HTTPS"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTPS}" pattern="OFF"/> 
    </conditions> 
    <action type="Redirect" url="https://{HTTP_HOST}{HTTP_URL}" redirectType="Permanent" appendQueryString="false" /> 
</rule> 

दो बातें ध्यान रखें: redirectType = "स्थायी" परिणाम होगा होगा नियम लागू होने तक ब्राउज़र के इतिहास/कैश खाली हो जाते हैं; यह एक अच्छी बात होनी चाहिए क्योंकि ब्राउज़र आगे बढ़ने वाला काम करेगा। साथ ही, appendQueryString = "false" आवश्यक है क्योंकि {HTTP_URL} सर्वर चर में पहले से पूर्ण क्वेरीस्ट्रिंग शामिल है; डिफ़ॉल्ट रूप से विकल्प "सत्य" होता है और इसके परिणामस्वरूप यहां डुप्लिकेट क्वेरीस्ट्रिंग होंगे।

+0

यह मुझे मिला सबसे अच्छा समाधान है। अधिकांश अन्य उदाहरण डोमेन नाम को हार्ड कोड करते हैं, लेकिन यह कोई नहीं करता है, इसलिए यह अधिक शक्तिशाली है। –

+0

कमाल! धन्यवाद –

5

यदि यह किसी के लाभ के लिए है, यहाँ एक ही बात केवल एक ही नियम के साथ प्राप्त की है:

<rule name="Redirect HTTP to HTTPS and non-WWW to WWW" stopProcessing="true"> 
    <match url="(.*)"/> 
    <conditions trackAllCaptures="false" logicalGrouping="MatchAny"> <!-- match non-HTTPS or non-WWW --> 
     <add input="{HTTPS}" pattern="^OFF$"/> <!-- if connection not secure --> 
     <add input="{HTTP_HOST}" matchType="Pattern" ignoreCase="true" pattern="^example\.com$" /><!-- domain is not canonical --> 
    </conditions> 
    <action type="Redirect" url="https://www.example.com{HTTP_URL}" redirectType="Permanent" appendQueryString="false"/> 
</rule> 
संबंधित मुद्दे