2013-07-18 14 views
22

पर पुनर्निर्देशित करने के लिए मुझे http और https urls दोनों के लिए www url पर गैर-www urls को रीडायरेक्ट करने की आवश्यकता है। मैंने web.config में नियमों का पालन करने की कोशिश की।web.config गैर-www को www

<rule name="Redirect to WWW" stopProcessing="true"> 
<match url=".*" /> 
<conditions> 
    <add input="{HTTP_HOST}" pattern="^domain.com$" /> 
</conditions> 
<action type="Redirect" url="http://www.domain.com/{R:0}" redirectType="Permanent" /> 

<rule name="Redirect to WWW https" stopProcessing="true"> 
<match url=".*" /> 
<conditions> 
    <add input="{HTTPS}" pattern="^domain.com$" /> 
</conditions> 
<action type="Redirect" url="https://www.domain.com/{R:0}" redirectType="Permanent" /> 

यह गैर- SSL यूआरएल के लिए पूरी तरह से काम करता है लेकिन ssl के मामले में यह https://domain.com से http://www.domain.com

को अनुप्रेषित कृपया सहायता से आप अपने नियम को दूर करने के।

+1

पहला नियम दोनों अनुरोधों के प्रकार को पकड़ता है और दूसरा संसाधित नहीं किया जाएगा – Dima

उत्तर

40

एक सुरक्षित नियम के लिए जो Match Any और Match All स्थितियों दोनों के लिए काम करता है, तो आप रीवाइट मानचित्र समाधान का उपयोग कर सकते हैं। नियम बनाने से पहले आपको एक पुनः लिखने के नक्शे को बनाने की आवश्यकता होने के बाद से इसे स्थापित करने के लिए कभी भी थोड़ी सी अतिरिक्त कोशिश होने के साथ ही यह एक बिल्कुल अच्छा समाधान है। दूसरे शब्दों में, यदि आप इसे प्रोटोकॉल को संभालने की अपनी एकमात्र विधि के रूप में उपयोग करना चुनते हैं, तो आप सुरक्षित रहेंगे।

आप मानचित्रप्रोटोकॉल नामक एक रिवाइट मानचित्र बना सकते हैं, आप किसी भी नियम कार्रवाई के भीतर प्रोटोकॉल के लिए {MapProtocol:{HTTPS}} का उपयोग कर सकते हैं।

<rewrite> 
    <rules> 
    <rule name="Redirect to www" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions trackAllCaptures="false"> 
     <add input="{HTTP_HOST}" pattern="^domain.com$" /> 
     </conditions> 
     <action type="Redirect" 
     url="{MapProtocol:{HTTPS}}://www.domain.com/{R:1}" /> 
    </rule> 
    </rules> 
    <rewriteMaps> 
    <rewriteMap name="MapProtocol"> 
     <add key="on" value="https" /> 
     <add key="off" value="http" /> 
    </rewriteMap> 
    </rewriteMaps> 
</rewrite> 

Reference

+2

यह नियम बलपूर्वक मेरे सभी लिंक https पर रीडायरेक्ट कर रहा है। मुझे जो चाहिए वह है यदि यह http + गैर-www है, तो उसे http + www पर रीडायरेक्ट करना चाहिए और https + गैर-www को https + www – Anand

+2

पर रीडायरेक्ट करना चाहिए। यह एक पूरी तरह से काम करता है। बहुत बहुत धन्यवाद – Anand

+5

यह ध्यान देने योग्य है कि आपको यूआरएल रिवाइट मॉड्यूल 2.0 की आवश्यकता है ([http://www.iis.net/downloads/microsoft/url-rewrite ](http://www.iis.net/downloads/microsoft/url -rewrite)) इसके लिए काम करने के लिए। –

1

मैं जानता हूँ कि यह एक पुरानी पोस्ट है, लेकिन यह पूरी तरह से उत्तर नहीं है। मैं Satpals answer

पहले शासन का विस्तार समाप्त हो गया पकड़ता http + www और दूसरा एक कैच गैर- www

किसी कारण मैं मुट्ठी नियम में MapProtocol उपयोग नहीं कर सका के लिए, लेकिन यह यूआरएल में प्रत्यक्ष रूप से लिखा https के साथ काम करता है। यहाँ

<rewrite> 
    <rules> 
    <rule name="Special case www &amp; HTTPS off" enabled="true" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{HTTP_HOST}" pattern="^www\.example\.com$" /> 
     <add input="{HTTPS}" pattern="off" /> 
     </conditions> 
     <action type="Redirect" url="https://www.example.com/{R:1}" redirectType="SeeOther" /> 
    </rule> 
    <rule name="Redirect to www &amp; HTTPS" enabled="true" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions trackAllCaptures="false"> 
     <add input="{HTTP_HOST}" pattern="^example\.com$" /> 
     </conditions> 
     <action type="Redirect" url="{MapProtocol:{HTTPS}}://www.example.com/{R:1}" redirectType="SeeOther" /> 
    </rule> 
    </rules> 
    <rewriteMaps> 
    <rewriteMap name="MapProtocol"> 
     <add key="on" value="https" /> 
     <add key="off" value="http" /> 
    </rewriteMap> 
    </rewriteMaps> 
</rewrite> 
+0

यह मेरे लिए काम किया! –

3

अन्य उत्तर अनावश्यक लंबे होते हैं, यहाँ नियम मैं का उपयोग करें (सिर्फ कॉपी और पेस्ट) है:

<rule name="ensurewww" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions> 
    <add input="{CACHE_URL}" pattern="^(.+)://(?!www)(.*)" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}://www.{C:2}" redirectType="Permanent" /> 
</rule> 

यह जबकि HTTP संरक्षण www संस्करण पर रीडायरेक्ट करेगा और HTTPS प्रोटोकॉल

उम्मीद है कि यह मदद करता है।