IIS6 बनाम IIS7 और IIS7.5: आधार में प्लस चिह्न (+) के साथ यूआरएल को संभालना (क्वेरिस्ट्रिंग नहीं)


38

बेस URL में कोई भी चिह्न (+) नहीं है, जो URL (querystring नहीं), IIS7 और IIS7.5 (Windows Server 2008 और 2008 R2) ASP.NET अनुप्रयोग पर डिफ़ॉल्ट हैंडलर को URL अग्रेषित करने के लिए प्रकट नहीं होता है । मैंने एक कस्टम HTTP हैंडलर के साथ इस मुद्दे को नोटिस करना शुरू कर दिया, *.htmlलेकिन मेरे पास एक ही मुद्दा है *.aspx। IIS6 (सर्वर 2003) को इन समान URL के साथ कोई समस्या नहीं है।

समस्या को दोहराने के लिए, ASP.NET साइट में, मैंने ASPX फ़ाइलों का एक सेट बनाया, जो एक साधारण प्रतिक्रिया करता था। विभिन्न नामों के साथ:

  1. test_something.aspx
  2. test_some + thing.aspx
  3. test_some thing.aspx

तीसरी फ़ाइल यह देखने के लिए एक परीक्षण थी कि क्या IIS7 [.5] प्लस प्रतीकों को रिक्त स्थान के रूप में मान रहा था (जैसा कि यह क्वेरिस्टो में होगा); यह मामला नहीं प्रतीत होता है। इन सभी फ़ाइलों के स्थान पर, किसी भी ASP.NET हैंडलर को प्राप्त करने से पहले IIS6 लेकिन IIS7 / IIS7.5 में 404 हिट http://somehost/test_some+thing.aspxया http://somehost/test_some%2bthing.aspxठीक काम करेगा। क्या IIS7 / 7.5 में कुछ कॉन्फ़िगरेशन है जो मुझे HTTP हैंडलर निर्धारित करने के लिए उपयोग किए गए अंतिम एक्सटेंशन को याद किए बिना URL में "प्लस" देखने के लिए इसे "लापता" करने के लिए याद आ रही है?


मुझे आश्चर्य है कि अगर प्लस साइन से बचने में मदद मिलेगी। हो सकता है \+?
अगली सूचना तक रोक दिया गया।

जवाबों:


39

IIS और प्लस के अधिक संयोजनों की खोज करने के बाद, ऐसा प्रतीत होता है कि IIS7 [.5] उस चरित्र के उपयोग के कुछ डर से डिफ़ॉल्ट रूप से प्लस चिह्न वाले URL को अस्वीकार करने के लिए सेट किया गया है; हालांकि उस प्रतीक को अभी भी क्वीरस्ट्रिंग में अनुमति दी गई है। समाधान पर requestFiltering विशेषता डिफ़ॉल्ट बदलने के लिए है <system><webServer><security><requestFiltering>एक कमांड लाइन कॉल के साथ दोगुना-एन्कोडेड वर्णों की अनुमति के लिए (अंततः को संशोधित करने के लिए अपने ASP.NET web.config):

%windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:system.webServer/security/requestFiltering -allowDoubleEscaping:true

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


2
बस एक FYI करें: आपको रूट स्तर के टेम्पलेट पर ऐसा करने की आवश्यकता नहीं है। यह किसी भी Web.config फ़ाइल में किया जा सकता है या एक <स्थान /> टैग के साथ एक सबफ़ोल्डर पर लागू किया जा सकता है।
मौनदास

IIS प्रबंधक में: साइट्स => YourSite => फ़िल्टरिंग का अनुरोध करें> फ़ीचर सेटिंग संपादित करें ... => चेक करें डबल भागने की अनुमति दें => ठीक है
डायनेवाला

9

मुझे अभी पता चला है कि URL में स्थान के लिए pluses को मैप करने के लिए IIS7 को समझाने के लिए एक पुनर्लेखन नियम कैसे बनाया जाए। मेरे मामले में यह विरासत के बुकमार्क या हाइपरलिंक्स को काम पर रखना था।

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="True" />
    </security>
    <rewrite>
      <rules>
        <rule name="RewriteUserFriendlyURL1" stopProcessing="false">
          <match url="\+" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="{UrlDecode:{REQUEST_URI}}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

अधिक जानकारी और संदर्भ के लिए मेरी ब्लॉग पोस्ट देखें ।


1
मैंने एक मुद्दा हल किया, जहाँ मुझे क्वेरी स्ट्रिंग में प्लस साइन्स के साथ लीगेसी URL का समर्थन करना था, बस ऊपर दिए गए सुरक्षा अनुभाग का उपयोग करके "True" की अनुमति दें।
स्टीफन

मेरे पास एक अनूठा मामला है - कुछ विरासत url की दो अनुक्रमिक नलियां हैं, अर्थात "++"। ऐसा लगता है कि IIS के खिलाफ एक विशेष नियम है। कोई विचार?
बूमरौपर

@boomhauer आपको एक हैंडलर लिखने की आवश्यकता हो सकती है ... या उन URL को होस्ट करने के लिए एक अलग वेबसर्वर का उपयोग करना चाहिए? एक बार जब मैंने अपाचे mod_rewrite को विरासत URL का एक गुच्छा बनाया और उन्हें विभिन्न नई जगहों पर पुनर्निर्देशित किया, और यह थोड़ा अधिक लचीला लग रहा था।
नाथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.