आधुनिक वेब अनुप्रयोगों में, एकल प्रविष्टि बिंदु की अवधारणा का उपयोग करने के लिए प्रथागत है। यह अवधारणा इस तथ्य पर उबलती है कि एप्लिकेशन सर्वर के सभी अनुरोधों को एक फ़ाइल पर पुनर्निर्देशित किया जाता है, जो अनुरोध मापदंडों के आधार पर स्क्रिप्ट के आगे के व्यवहार का समन्वय करता है। इस तरह के दृष्टिकोण से निर्माण के चरण में और परियोजना के समर्थन के चरण में भारी लाभ मिलता है, क्योंकि कोड अतिरेक काफी कम हो जाता है, और ऐसे अनुप्रयोगों के लिए जो गतिशील सामग्री में हेरफेर करते हैं, एक एकल प्रविष्टि बिंदु एकमात्र सही निर्णय है।
उपरोक्त उदाहरण अपाचे वेब सर्वर को कॉन्फ़िगर करने के लिए प्रासंगिक हैं।
कार्यान्वयन में एकल प्रविष्टि बिंदु की अवधारणा इस तथ्य से नीचे आती है कि आपको वेब सर्वर को फ़ाइल के लिए सभी अनुरोधों को पुनर्निर्देशित करने की आवश्यकता है, जो कि हमारा एकमात्र प्रवेश बिंदु होगा, उदाहरण के लिए, यह एप्लिकेशन रूट निर्देशिका में index.php फ़ाइल होगी। इन उद्देश्यों के लिए, Apache वेब सर्वर में mod_rewrite मॉड्यूल में स्थित एक RewriteRule निर्देश है। निर्देश का सिंटैक्स निम्नानुसार है:
RewriteRuleएक पैटर्न एक perl- संगत नियमित अभिव्यक्ति है जो वर्तमान URL पर लागू होता है, और यह नियम लागू होने के समय वर्तमान URL है। यह URL मूल रूप से अनुरोधित URL से मेल नहीं खाता है, क्योंकि इस बिंदु तक, अन्य नियम पहले से ही इस URL पर लागू हो सकते हैं और तदनुसार परिवर्तित हो सकते हैं।
प्रतिस्थापन एक स्ट्रिंग है जो मूल URL को बदलेगा जिसके लिए पैटर्न के लिए एक मैच है। पाठ के अलावा, आप प्रतिस्थापन में बहुत सी चीजों का उपयोग कर सकते हैं, लेकिन अभी तक हम केवल REQUEST_URI सर्वर चर में रुचि रखते हैं।
झंडे में से, हम केवल दो का उपयोग करेंगे - क्यूएसए और एल। पहला परिवर्तन तंत्र को इंगित करता है कि आपको क्या जोड़ना है, प्रतिस्थापित नहीं करना चाहिए, क्वेरी स्ट्रिंग URL से मौजूदा एक, लुकअप स्ट्रिंग में। L ध्वज सर्वर को इस बिंदु पर रूपांतरण प्रक्रिया को रोकने के लिए कहता है और अब कोई भी रूपांतरण नियम लागू नहीं करता है।
उपरोक्त सभी को देखते हुए, आवेदन की मूल निर्देशिका में .htaccess फ़ाइल में निम्नलिखित पंक्ति जोड़ें:
RewriteRule ^(.*)$ index.php?%{REQUEST_URI} [QSA,L]लेकिन हमें यह नहीं भूलना चाहिए कि सीधे स्क्रिप्ट तक पहुंचने के अलावा, ब्राउज़र सर्वर से विभिन्न संसाधन फ़ाइलों का अनुरोध करेगा, जैसे कि कैस्केडिंग स्टाइल शीट, चित्र, स्क्रिप्ट फ़ाइलें, आदि। ब्राउज़र को वांछित तक पहुंच प्रदान करने के लिए सर्वर के लिए, अतिरिक्त शर्तों को रीराइट्रूले निर्देश के लिए सेट किया जाना चाहिए। इन शर्तों का वर्णन रिवेरिटकॉन्ड के निर्देश द्वारा किया गया है, जो यह निर्धारित करेगा कि URL में कब परिवर्तित किया जाए या कब इसे अपरिवर्तित छोड़ा जाए।
विवरण में गहराई से जाने के बिना, मैं कुछ उदाहरण दूंगा, और उल्लिखित निर्देशों के बारे में अधिक विस्तार से आप लेख के अंत में लिंक पढ़ सकते हैं।
RewriteCond %{REQUEST_URI} !^\/resources/styles/(.*).cssRewriteCond %{REQUEST_URI} !^\/resources/images/(.*).pngRewriteCond %{REQUEST_URI} !^\/resources/images/(.*).jpgRewriteCond %{REQUEST_URI} !^\/resources/lib/jquery/(.*).jsउपरोक्त लाइनों को देखते हुए, आप तुरंत नोटिस कर सकते हैं कि वे REQUEST_URI की तुलना पर्ल-संगत नियमित अभिव्यक्ति द्वारा बताई गई रेखा से करते हैं, और संयोग की स्थिति में, URL स्पूफिंग नहीं होती है।
नोट: याद रखें कि सभी ReriteCond निर्देशों को RewriteRule का उपयोग करने से पहले वर्णित किया जाना चाहिए।
ऊपर वर्णित विधि सिर्फ एक संभव है, आइए विचार करें कि अवधारणा को Zend फ्रेमवर्क में कैसे लागू किया जाता है। पिछले उदाहरण में, यह माना गया था कि प्रवेश बिंदु वेब एप्लिकेशन की रूट डायरेक्टरी में है, ZD फ्रेमवर्क पर आधारित डिफ़ॉल्ट प्रोजेक्ट संरचना उस साझा निर्देशिका में भिन्न है। एक स्तर नीचे ले लिया, डिफ़ॉल्ट रूप से इसका नाम सार्वजनिक है और वेब एप्लिकेशन तक पहुंच को कॉन्फ़िगर किया गया है ताकि सार्वजनिक निर्देशिका आवेदन की जड़ हो, अर्थात। सार्वजनिक निर्देशिका के बाहर स्थित संसाधनों तक पहुंच प्राप्त करने के लिए, स्क्रिप्ट को उच्च स्तर पर लौटने के लिए सशर्त पते का उपयोग करना चाहिए या पूर्ण पते का उपयोग करना चाहिए, जो बिल्कुल सुविधाजनक नहीं है, आप इस तरह से कुछ कर सकते हैं:
define( 'DIR_SEPARATOR ', '/' ); define( 'ROOT', '..' . DIR_SEPARATOR );
इस प्रकार, हमें अपने आवेदन की तार्किक जड़ के सापेक्ष पथ से युक्त एक स्थिरांक मिला।
यह सार्वजनिक / .htaccess फ़ाइल की सामग्री लिखने के लिए बनी हुई है:
RewriteCond %{REQUEST_FILENAME} -s [OR]RewriteCond %{REQUEST_FILENAME} -l [OR]RewriteCond %{REQUEST_FILENAME} -dRewriteRule ^.*$ - [NC,L]RewriteRule ^.*$ index.php [NC,L]वर्णित दृष्टिकोण का उपयोग करते हुए, एप्लिकेशन के सार्वजनिक संसाधनों पर कुछ एक्सेस अधिकारों को सेट करने की आवश्यकता नहीं है, अब हमें उन्हें केवल सार्वजनिक निर्देशिका में रखने की आवश्यकता है और एक्सेस स्वचालित रूप से दी जाएगी, और जनता के बाहर एप्लिकेशन स्क्रिप्ट फ़ाइलों तक पहुंच बंद हो जाएगी।
Mod_rewrite मॉड्यूल प्रलेखन