के यकीन है कि हम एक ही पृष्ठ पर कर रहे हैं करते हैं। ;) अपने सर्वर रूट निर्देशिका में मैं एक .htaccess फ़ाइल है और उस फ़ाइल में मेरे पास है:
RewriteEngine On
RewriteRule ^(.+/)?custom $1index.php?page=value [NC,L]
RewriteRule तीन घटक होते हैं: एक मैच पैटर्न, लक्ष्य, और झंडे की एक सूची। मेल खाने वाला पैटर्न सादा पाठ या एक नियमित अभिव्यक्ति हो सकते हैं।लक्ष्य में नियमित अभिव्यक्ति मिलान पैटर्न में कैद किए गए इंटरमल्ड किए गए चर के साथ सादा पाठ या टेक्स्ट हो सकता है। दोनों का प्रतिमान है और लक्ष्य निर्देशिका .htaccess फ़ाइल स्थित है में।
मेल खाने वाला पैटर्न यूआरएल वर्तमान निर्देशिका के बाद यह है कि में पाठ की तुलना में है के सापेक्ष हैं। यदि कोई सफल मैच है तो लक्ष्य निर्देशिका से कहा जाता है। Htaccess फ़ाइल में है। अगर जानकारी मिलान पैटर्न में कैप्चर की जाती है तो लक्ष्य में चर पहले लक्ष्य में विभाजित होते हैं।
इस उदाहरण में .htaccess फ़ाइल सर्वर मार्ग पर स्थापित इसलिए खाने वाला पैटर्न के बाद URL पाठ की तुलना में है है: http://localhost/
इसे बाहर का परीक्षण करने के लिए, यहाँ PHP कोड मैं एक सूचकांक में डाल दिया है .php फ़ाइल:
<?php
echo 'page value: ' .$_GET['page'] . '<br>';
echo 'script loaded: ' . $_SERVER['PHP_SELF'];
?>
जब मैं अपने ब्राउज़र में http://localhost/custom
पर जाएँ: रेगुलर एक्सप्रेशन मिलान पैटर्न स्ट्रिंग "कस्टम" की तुलना में है, वहाँ एक सफल मैच है लक्ष्यतो 210 निष्पादित किया गया है, और मुझे रूट निर्देशिका में index.php पृष्ठ मिलता है। दिखाया गया पेज इस तरह दिखता है:
page value: value
script loaded: /index.php
अगला मैं एक नया निर्देशिका कहा जाता "newFolder" सर्वर मार्ग पर बना सकते हैं और नव निर्मित निर्देशिका के लिए index.php फाइल कॉपी।
जब मैं अपने ब्राउज़र में http://localhost/newFolder/custom
पर जाएँ: रेगुलर एक्सप्रेशन मिलान पैटर्न स्ट्रिंग की तुलना में है "newFolder/कस्टम", फिर वहाँ एक सफल मैच इस बार लक्ष्य newFolder/index.php?page=value
क्रियान्वित किया जाता है, और मैं मिल index.php पृष्ठ को नई फ़ोल्डर निर्देशिका में लोड किया गया। दिखाया गया पृष्ठ अब इस तरह दिखता है:
page value: value
script loaded: /newFolder/index.php
तो, इसी तरह, मैं रूट निर्देशिका में निर्देशिका और नई index.php फ़ाइलों के किसी भी संख्या उन निर्देशिकाओं में बना सकते हैं, और जब "कस्टम" उन निर्देशिकाओं में है, वहाँ नेविगेट , यह .htaccess फ़ाइल को वर्तमान उपनिर्देशिका में संबंधित index.php फ़ाइल को लोड करना चाहिए।
~~~
मैं यहाँ एक अंग पर बाहर जाने के लिए और मान लें कि आपके गतिशील पृष्ठों को लोड करना चाहते हैं, इसलिए "कस्टम" पर कब्जा एक गतिशील पेज नाम के रूप में और पेज क्षेत्र में यह डंप जा रहा हूँ (की जगह "मान") और वर्तमान उपनिर्देशिका में index.php फ़ाइल को भेजें।
RewriteEngine On
RewriteCond %{REQUEST_URI} !index\.php
RewriteRule ^(.+/)?(.+)$ $1index.php?page=$2 [NC,L]
के रूप में उल्लेख किया है, कोष्ठकों गतिशील पाठ को पकड़ने और लक्ष्य स्ट्रिंग जहां डॉलर साइन नंबर दिए गए हैं में यह डंप। तो ब्रांड्स के पहले सेट में कैप्चर किया गया टेक्स्ट "$ 1" को प्रतिस्थापित करता है और दूसरे सेट में कैप्चर किया गया टेक्स्ट "$ 2" को प्रतिस्थापित करता है। मैंने इस नियम को डबल-डुबकी से रोकने के लिए RewriteCond
कथन भी जोड़ा। :) अगर मुझे यह नियम "कस्टम" कॉल और index.php दोनों के लिए पुनर्निर्देशन के लिए निष्पादित नहीं किया जाता है।
तो अब जब मैं http://localhost/newFolder/whoopdeedoo
पर जाएँ, regex मैच पैटर्न "newFolder/whoopdeedoo" की तुलना में है, वहाँ एक सफल मिलान है, लक्ष्य newFolder/index.php?page=whoopdeedoo
निष्पादित किया जाता है, और मैं मिलता है:
page value: whoopdeedoo
script loaded: /newFolder/index.php
~~~
ड्रोनिंग के जोखिम पर, यहां कुछ पृष्ठभूमि जानकारी है।
RewriteEngine On
RewriteRule ^custom index.php?page=value [NC,L]
लेकिन जब उप निर्देशिकाओं पर आपके ब्राउज़र नेविगेट यह काम नहीं करता: आप इस रूट निर्देशिका में काम करता है उल्लेख किया। टिप्पणियों को पढ़ने के बाद, ऐसा लगता है कि आप की खोज की यह अगले बिट उप निर्देशिकाओं के लिए काम करता है, विशेष रूप से "newFolder":
RewriteEngine On
RewriteRule ^newFolder/custom newFolder/index.php?page=value [NC,L]
लेकिन अब यह नहीं रह गया रूट निर्देशिका के लिए काम करता है। तो आप बस दोनों को शामिल कर सकते हैं:
RewriteEngine On
RewriteRule ^custom index.php?page=value [NC,L]
RewriteRule ^newFolder/custom newFolder/index.php?page=value [NC,L]
हालांकि यहां कुछ चीजें हैं जो मुझ पर कूदती हैं। एक यह है कि मेरी रूट में हार्डकोडिंग निर्देशिका नामों की बजाय। Htaccess मैं प्रत्येक उपनिर्देशिका में .htaccess फ़ाइलों को रखता हूं और वहां यूआरएल प्रोसेसिंग लेता हूं।
लेकिन यदि किसी भी कारण से आप रूट निर्देशिका में .htaccess फ़ाइल को बनाए रखना पसंद करते हैं, तो, नियमों में डुप्लिकेशंस मेरे ऊपर क्या कूदता है।
RewriteEngine On
RewriteRule ^(.+/)?custom $1index.php?page=value [NC,L]
regex कब्जा कोष्ठकों "newFolder /", और कोष्ठकों के अंदर टेक्स्ट को: तो, वैकल्पिक रूप से, आप नियमित अभिव्यक्ति उपनिर्देशिका एक पर कब्जा कर लिया चर नाम, इस उत्तर के शीर्ष पर दिखाया की तरह बनाने के लिए उपयोग कर सकते हैं हम कह रहे हैं, "फॉरवर्ड स्लैश के बाद एक या अधिक वर्णों को कैप्चर करें"। फिर, यदि कोई सफल मिलान होता है, तो कैप्चर किया गया मान लक्ष्य में "$ 1" को प्रतिस्थापित करता है। कारण यह रूट में भी काम करता है क्योंकि ब्रांड्स के बाद प्रश्न चिह्न माता-पिता के अंदर रेगेक्स को वैकल्पिक बनाता है। तो अगर "कस्टम" से पहले कुछ भी नहीं है तो हम अभी भी एक मैच के लिए अच्छे हैं। उस स्थिति में "$ 1" को खाली स्ट्रिंग के साथ बदल दिया जाता है।
क्या आप "कस्टम" गतिशील होना चाहते हैं? या यह मुश्किल कोडित होना चाहिए? साथ ही, क्या आप गतिशील होने के लिए "पृष्ठ =" के बाद "मान" चाहते हैं? यदि हां, तो आप "मूल्य" का मूल्य कहां प्राप्त करना चाहते हैं? : एस – bloodyKnuckles