2013-04-16 13 views
5

के साथ यूआरएल में अतिरिक्त फॉरवर्ड स्लैश रीडायरेक्ट कैसे करें यह प्रश्न उदाहरणों के साथ सबसे अच्छा काम करेगा।आईआईएस

अपने वेब एप्लिकेशन http://example.com/WebApp/

According to Microsoft पर होस्ट की गई है, अगर आगे स्लैश याद आ रही है आईआईएस रीडायरेक्ट करेगा। और यह अपेक्षित काम करता है: http://example.com/WebApp पर भेजा गया अनुरोध http://example.com/WebApp/ पर रीडायरेक्ट किया गया है।

अब मेरे मामले में, किसी ने अतिरिक्त आगे स्लैश के साथ URL को बुकमार्क किया: http://example.com/WebApp//। यह वेब ऐप को अपेक्षित के रूप में लोड करेगा लेकिन अब सभी रिश्तेदार यूआरएल गलत हैं। इसलिए यदि मैं एक ही डोमेन पर एक और ऐप कहता हूं, उदाहरण के लिए ../AnotherApp/SomePage.aspx, तो यह /AnotherApp/SomePage.aspx सही ढंग से लोड करने के बजाय /WebApp/AnotherApp/SomePage.aspx लोड करने का प्रयास करेगा।

मैं http://example.com/WebApp// को http://example.com/WebApp/ पर कैसे रीडायरेक्ट कर सकता हूं?

+0

यह नहीं कह रहा कि आपको क्या करना चाहिए ... या यह सुनिश्चित करने के लिए काम करेगा क्योंकि मैं अभी इसका परीक्षण नहीं कर सकता। लेकिन शायद आप पेज लोड इवेंट में कुछ कोड जोड़ सकते हैं जो Request.Url को चेक करता है तो यूआरएल मेल नहीं खाता है तो उपयोगकर्ता को पृष्ठ पर रीडायरेक्ट करें। क्या आपने कुछ कोशिश की है? –

+0

@DanielCook यह काम नहीं करेगा क्योंकि उस समय, अनुरोध ऑब्जेक्ट '/ WebApp/Default.aspx' कहता है, इसलिए यह बहुत देर हो चुकी है। – styfle

+0

संभावित डुप्लिकेट [एकाधिक फॉरवर्ड स्लैश निकालें] (http://stackoverflow.com/questions/12004223/remove-multiple-forward-slashes) – dana

उत्तर

0

आप आईआईएस रीराइट मॉड्यूल (http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rule_Pattern) का उपयोग एक रेगेक्स के साथ कर सकते हैं जो एकल स्लैश संस्करण पर रीडायरेक्ट करता है।

उदाहरण के लिए, आप इस regex के साथ यूआरएल अतिरिक्त स्लैश के साथ मेल कर सकते हैं:

http://.*/{2,}

+0

मैंने कोशिश की और काम करने में सक्षम नहीं था। एक एफवाईआई के रूप में, मैंने यह कोशिश की है: <नियम नाम = "डबलस्लैशफिक्स" stopProcessing = "true"> dana

+0

मैं इसे अपने web.config में कहां जोड़ूं? – styfle

+1

system.web सर्वर-> पुनः लिखना-> नियम-> नियम –

1

यह मुश्किल प्रतीत होता है अकेले सर्वर साइड स्क्रिप्ट के साथ यह करने के लिए। शायद जावास्क्रिप्ट में एक रीडायरेक्ट करना पर्याप्त होगा?

<html> 
<head> 
<script type="text/javascript"> 
(function() { 
    var protocol = location.href.substr(0, location.href.indexOf("://")); 
    var restOfUrl = location.href.substr(location.href.indexOf("://") + "://".length); 
    if (restOfUrl.match(/\/\//)) { 
     location.href = protocol + "://" + restOfUrl.replace(/\/\//g, "/"); 
    } 
})(); 
</script> 
</head> 
<body> 
... 
</body> 
</html> 

इसके अलावा, आप ताकि खोज इंजन सूचकांक चीजों को सही ढंग से अपने पृष्ठ में एक canonical link स्थापित करने पर विचार करना चाहिए।

+0

मैं इस समाधान से बचने की कोशिश कर रहा था। यदि कोई भी बेहतर उत्तर के साथ आता है, तो मैं इसे स्वीकार करूंगा। – styfle

+0

मुझे सर्वर पर 2 स्लेश पढ़ने में कठिन समय था, इसलिए मैंने इसका सहारा लिया। दिलचस्प बात यह है कि यहां लगभग एक ही सवाल है - http://stackoverflow.com/questions/12004223/remove-multiple-forward-slashes। स्वीकृत उत्तर में, Global.asax.cs के भीतर सर्वर चर को पढ़ा जा रहा है। यकीन नहीं है कि यह काम करता है, लेकिन यह एक शॉट के लायक है। – dana

+0

मैंने अभी परीक्षण किया है और डबल स्लेश UNENCODED_URL सर्वर चर में मौजूद हैं। आप इसके लिए जांच कर सकते हैं और तदनुसार रीडायरेक्ट कर सकते हैं। – dana