2015-06-23 6 views
7

मैं Sitecore 7.5 उपयोग कर रहा हूँ और hyphne के साथ अंतरिक्ष ("") की जगह दो बातेंSitecore - पुनर्लेखन "_" के लिए "-" यूआरएल में लेकिन 404

<replace mode="on" find=" " replaceWith="-" />(Space with hyphen) 
<replace mode="on" find="_" replaceWith="-" />(underscore with hyphen) 

की जगह के लिए जा (-) ठीक काम कर रहा है, लेकिन अंडरस्कोर (_) के मामले में यह हाइफ़न (-) में बदल रहा है लेकिन 404 पर रीडायरेक्ट कर रहा है, कोई विचार?

हम इसे ईवेंट हैंडलर द्वारा प्रबंधित कर सकते हैं लेकिन ऐसा नहीं करना चाहते हैं।

उत्तर

10

मैंने another answer पर टिप्पणी की कि समस्या यह है कि वस्तुओं को हल करते समय, इनकमिंग में रिवर्स प्रतिस्थापन लागू होते हैं। चूंकि आपके पास दो प्रतिस्थापन हैं, दोनों मैपिंग को "-" पर आने पर यह विफल रहता है क्योंकि यह प्रारंभ में अंतरिक्ष के साथ "-" को प्रतिस्थापित करने का प्रयास करता है, लेकिन उनमें से कुछ हाइफ़न अंडरस्कोर होना चाहिए लेकिन यह नहीं पता कि कौन सा होना चाहिए।

उदाहरण के लिए, दिया गया पथ: /path to some/item_url तब उत्पन्न यूआरएल /path-to-some/item-url है।

आने पर, रिवर्स प्रतिस्थापन का उत्तर दिया जाता है, और साइटकोर अब /path to some/item url की तलाश में है, जो मौजूद नहीं है और इसलिए 404 फेंक दिया गया है। चूंकि "_" (अंडरस्कोर) को "-" (हाइफ़न) द्वारा प्रतिस्थापित किया गया था, आने वाले "-" (हाइफ़न) को "" (स्पेस) के साथ बदल दिया गया है। चूंकि प्रतिस्थापित करने के लिए कोई हाइफ़न नहीं छोड़ा गया है, इसलिए यह अंडरस्कोर से प्रतिस्थापित नहीं हो सकता है।

Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel में एक नज़र डालें और आपको MainUtil.DecodeName(args.Url.ItemPath) पर एक कॉल दिखाई देगी जहां EncodeNameReplacements लागू होते हैं।

आप पहली बार इनसे निपटने के लिए एक ईवेंट हैंडलर का उपयोग कर बेहतर हैं ताकि आपको किसी भी तरह के मैपिंग के बारे में चिंता करने की आवश्यकता न हो।

+0

मैंने आइटम नामकरण को नियंत्रित करने के लिए नियम इंजन का उपयोग करने के बारे में एक ब्लॉग पोस्ट लिखा जो यूआरएल को नियंत्रित करने के लिए उपयोगी है: https://jammykam.wordpress.com/2015/07/13/seo-friendly-urls-in-sitecore- रोकथाम इलाज से बेहतर है/ – jammykam

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