2013-09-21 6 views
6

यदि मैं अपनी वेब.कॉन्फिग फ़ाइल में httpRedirect और rewrite का उपयोग कर रहा हूं, तो मैं कैसे निर्दिष्ट कर सकता हूं कि कौन सा नियम प्राथमिकता लेता है?आईआईएस रीडायरेक्ट नियम प्राथमिकता

उदाहरण के लिए, मान लें कि मेरे पास wildcard="*" जैसे सभी नियमों को सामान्य पकड़ है, लेकिन wildcard="/news" destination="/new/news" भी है, ऐसा लगता है कि केवल wildcard="*" नियम निष्पादित किया गया है।

अपाचे से ऐसा व्यवहार प्राप्त करना संभव है; मुझे लगता है कि आईआईएस में एक रास्ता होना चाहिए।

उत्तर

7

प्राथमिकता उनके द्वारा निर्दिष्ट क्रम के समान ही है। आईआईएस प्रबंधक के पास "मूव अप" और "डाउन डाउन" बटन है जो आपके लिए उन्हें फिर से ऑर्डर करता है।

उदाहरण के लिए:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="Rule1" stopProcessing="true"> 
      <match url="^foo/?bar=123"/> 
      <action type="Rewrite" url="foo.aspx?bar=special" appendQueryString="false" /> 
     </rule> 
     <rule name="Rule2" stopProcessing="true"> 
      <match url="^foo/?bar=([A-z0-9]+)"/> 
      <action type="Rewrite" url="foo.aspx?bar={R:1}" appendQueryString="false" /> 
     </rule> 
     <rule name="Rule3" stopProcessing="true"> 
      <match url="^foo/"/> 
      <action type="Rewrite" url="somethingElse.aspx" appendQueryString="false" /> 
     </rule> 
    </rules> 
</rewrite> 
</system.webServer> 
</configuration> 

/foo?bar=123 के लिए एक इनकमिंग अनुरोध पर विचार करें।

इस उदाहरण में, क्योंकि Rule1 पहला है, इसका मतलब है कि अनुरोध foo.aspx?bar=special बजाय foo.aspx?bar=123 फिर से लिखा जाएगा, भले ही यह एक साथ Rule1, Rule2, और Rule3 मेल खाता है।

stopProcessing="true" विशेषता यह सुनिश्चित करती है कि अन्य मिलान नियम निष्पादित नहीं किए गए हैं (यानी Rule2 और Rule3)।

स्रोत: http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rules_Evaluation

IIS में प्रत्येक विन्यास स्तर शून्य या अधिक पुनर्लेखन नियम निर्धारित नहीं हो सकता है। नियमों का मूल्यांकन उसी क्रम में किया जाता है जिसमें उन्हें निर्दिष्ट किया जाता है। यूआरएल रिवाइट मॉड्यूल निम्नलिखित एल्गोरिदम का उपयोग करके नियमों के सेट को संसाधित करता है:

  1. सबसे पहले, यूआरएल नियम के पैटर्न के खिलाफ मेल खाता है। यदि यह मेल नहीं खाता है, तो URL रीवाइट मॉड्यूल तुरंत उस नियम को प्रोसेस करना बंद कर देता है, और अगले नियम पर जाता है।
  2. यदि कोई पैटर्न मिलान करता है और नियम के लिए कोई शर्त नहीं है, तो यूआरएल रिवाइट मॉड्यूल इस नियम के लिए निर्दिष्ट क्रिया निष्पादित करता है और फिर अगले नियम पर जाता है, जहां यह उस नियम के इनपुट के रूप में प्रतिस्थापित यूआरएल का उपयोग करता है।
  3. यदि कोई पैटर्न मिलान करता है और नियम के लिए शर्तें हैं, तो यूआरएल रिवाइट मॉड्यूल शर्तों का मूल्यांकन करता है। मूल्यांकन सफल होता है, निर्दिष्ट नियम कार्रवाई किया जाता है, और उसके बाद फिर से लिखा यूआरएल बाद शासन
+0

को इनपुट के रूप में प्रयोग किया जाता है आप web.config फ़ाइल के संदर्भ में यह समझा सकता है? मैं गुई के बारे में कुछ भी नहीं जानता। – tau

+1

@tau मैंने अपना जवाब अपडेट किया है। – Dai

+0

बहुत बहुत धन्यवाद! मैं इस आशंका की कोशिश करूंगा। – tau

संबंधित मुद्दे