2012-06-29 9 views
11

मैं PHP में अपने MVC ढांचे, जिनमें से प्रारूप में यूआरएल का उपयोग करता है लिखा है:क्या यूआरएल में डबल-स्लेश का उपयोग करने के लिए कोई डाउनसाइड्स है?

/controller/method/param1/param2/param...

मैं इसे बनाया है ताकि "डिफ़ॉल्ट" तरीकों (डिफ़ॉल्ट index() द्वारा) पर ध्यान नहीं दिया जा सकता है, इसलिए यह /controller//param1/param2/param... जैसे यूआरएल में परिणाम देता है। उदाहरण के लिए, /view//panel-glide/3 का यूआरएल नियंत्रक में index('panel-glide', 3) पर कॉल करेगा।

यह ठीक और बेवकूफ काम करता है, लेकिन मुझे चिंता है कि जब वे डबल स्लेश देखते हैं तो खोज इंजन या कुछ पुराने ब्राउज़र बाहर निकल सकते हैं, क्योंकि मुझे नहीं लगता कि मैंने वास्तव में उन्हें पहले कभी इस्तेमाल किया है।

किसी को भी किसी भी मुद्दे के बारे में पता है कि मैं इस का उपयोग करते हुए देखने को मिल सकते है?

+1

बस एक ओर ध्यान दें: क्यों नियंत्रक/विधि की एक कठोर संरचना को लागू नहीं param1 = मान 1 और param2 2 = मान ...? मेरे लिए बहुत अधिक आरपीसी लगता है। उदाहरण के लिए –

+1

@LiorCohen Drupal आपके द्वारा सुझाए गए प्रारूप को स्वीकार करता है लेकिन ओपी के प्रारूप में यूआरएल को फिर से लिखता है। यह संभव है कि उन्होंने अभी छोड़ा कि दृश्यों के पीछे किया जा रहा है। – Jake

+0

मेरी प्राथमिक चिंता सख्त संरचनात्मक प्रवर्तन के बजाय लचीलापन है। और क्वेरी स्ट्रिंग पैरामीटर अभी भी मेरे इनपुट क्लास के साथ सुलभ हैं (उदा। '$ This-> इनपुट-> प्राप्त करें (' param' ') '' value1' वापस आ जाएगा)।मैं यूआरआई सेगमेंट को विधि पैरामीटर (जैसे कोडइग्निटर में) के उपयोग और नाइसर यूआरएल (जैसे '/ ब्लॉग/पोस्ट/हैलो-वर्ल्ड-फू-बार-बाज') के लिए पार्स किया जा सकता है – wyqydsyq

उत्तर

11

कि dangers of having two slashes की चर्चा वेबमास्टर्स पर एक मौजूदा जवाब नहीं है। यह अपाचे पर बहुत चर्चा करता है, लेकिन विचार आम तौर पर लागू होना चाहिए।

संक्षेप में, मुझे नहीं लगता कि यह अनुशंसा की जाती है। /foo/bar और /foo//bar वास्तव में दो पूरी तरह से अलग पथ होना चाहिए। प्रत्येक स्लैश महत्वपूर्ण है, और मानकीकरण को रोकने में प्रयास आपको काटने के लिए वापस आते हैं।

जैसा कि उत्तर में बताया गया है, भी बहुत वास्तविक सापेक्ष पथ विफल होने का खतरा है। कुछ ब्राउज़र सही ढंग से आंकड़े बताते हैं कि /foo/bar//baz से एक सापेक्ष पथ है, जबकि अन्य डबल स्लैश का इलाज एक के रूप में करेंगे, और /foo/fizz का चयन करेंगे।

प्लस, मुझे लगता है कि यह मजाकिया लग रहा है।

+0

मैं सहमत हूं। एक डेवलपर के रूप में यह मजाकिया लग रहा है। एक उपयोगकर्ता के रूप में यह मजाकिया लग रहा है। असल में, अगर मैंने उस यूआरएल को बुकमार्क किया और लिंक टूटा हुआ था, तो मैं अतिरिक्त को हटाने/इसे ठीक करने की अपेक्षा करता हूं। और टीबीएच, कोड में बदलाव ऐसा हो सकता है। – Jake

+0

@nomaD बस अतिरिक्त/बाहर को फिर से लिखें। – Jake

+1

मेरे मामले में '/ foo/bar' और'/foo // bar' दो पूरी तरह से अलग पथ हैं। 'foo/bar'' foo' नियंत्रक की 'bar() 'विधि/क्रिया को लोड कर देगा,' foo // bar' 'foo' नियंत्रक के' इंडेक्स ('बार') 'लोड हो जाएगा। – wyqydsyq

3

अपाचे एक भी स्लैश के रूप में कई स्लैश व्यवहार करता है। यह RewriteRules जैसी चीजों को प्रभावित करता है, उदा। आप इस तरह से एक नियम है, तो:

RewriteRule ^user/(.*)/([0-9]+)$ /user.php?id=$2 [QSA,L] 

कि इस तरह के user/nomaD/500 के रूप में लिंक पकड़ेगा लेकिन यह user//500 पकड़ नहीं होगा व्यवहार करता है के बाद से user/500 रूप

दूसरे शब्दों में तो, मुझे लगता है कि नहीं है कि आपके सेटअप काम करेगा क्योंकि यह param1 method के रूप में व्यवहार करेगा और सभी पैरामीटर को बाएं स्थानांतरित कर देगा, जब तक कि वे एक विशिष्ट प्रकार के न हों। मुझे लगता है कि यह आपके विशिष्ट मामले को प्रभावित नहीं करता है, लेकिन कई स्थितियों में, यह // का उपयोग करने के लिए नकारात्मक होगा।

+1

लेकिन उन्होंने कहा कि यह काम किया है। मुझे लगता है कि वह अपाचे पर नहीं हो सकता है और आप दोनों सही हो। – Jake

+0

मेरा सेटअप काम करता है, मैं एक कैच-ऑल रीराइट का उपयोग कर रहा हूं: 'रिवाइट्रूल^(। *) $ Index.php? $ 1 [एल] ', फिर यूआरएल को पार्स करने के लिए PHP का उपयोग करके और यह पता लगाना कि – wyqydsyq

+2

लोड हो रहा है – andrewtweber

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

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