2012-11-13 14 views
17

मैं अपने कोडइग्निटर यूआरएल को व्यवस्थित करने के लिए अपाचे रीराइट नियम स्थापित कर रहा हूं। निम्नलिखित नियम के उपयोग (या बहुत कुछ इसी तरह) दस्तावेज़

This question (है कि मैं जगह के आसपास मिल गया है मंच पदों आदि की और बहुत):

RewriteEngine on 
RewriteCond $1 !^(index\.php|phpinfo\.php|images|robots\.txt|sitemap\.xml\.gz|sitemap\.xml|assets) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

मैं $ 1 पता के बाद फिर से लिखना संदर्भित करता है (। *) से कैप्चर स्ट्रिंग पर, लेकिन पहला $ 1 (रीवाइटकॉन्ड के बाद सीधे) क्या दर्शाता है? मैंने देखा है कि कई उदाहरण% {REQUEST_URI} को रीवाइटकॉन्ड के लिए पहली तर्क के रूप में उपयोग करते हैं।

उत्तर

17

$1 मूल रूप से शुरुआत और स्ट्रिंग के अंत से सब कुछ की कैप्चर की गई सामग्री है। दूसरे शब्दों में, $1 = (.*)

आपका रीराइट में, ^ का प्रतीक स्ट्रिंग की शुरुआत, (.*) कुछ भी मैच के लिए कहते हैं, और $ स्ट्रिंग के अंत का प्रतीक है। तो, मूल रूप से, यह कह रहा है कि शुरुआत से स्ट्रिंग के अंत तक सबकुछ पकड़ो और उस मान को $ 1 तक असाइन करें।

तो यदि मैं www.example.com/tacos-are-good में टाइप करता हूं, तो $1 = "tacos-are-good"। तो आपका अंत पुन: लिखना वास्तव में www.example.com/index.php/tacos-are-good होगा। http://www.addedbytes.com/cheat-sheets/mod_rewrite-cheat-sheet/

+2

तो $ 1 के दोनों मामलों तो एक ही मूल्य का संदर्भ लें:

यहाँ ModRewrite के लिए नकल पुस्तिकाओं जो मदद की हो सकती है है? –

+1

हां। 'रिवाइटकॉन्ड' में, यह मूल रूप से कह रहा है कि यह फिर से लिखने के लिए तब तक चलाएगा जब तक कि स्थिति के दाईं ओर सूचीबद्ध फ़ाइलों के बराबर $ 1 बराबर न हो। – sbeliv01

6

$ 1 नियमित अभिव्यक्ति में ब्रांड्स के पहले सेट से मैच का प्रतिनिधित्व करता है जो इसके बाद होता है। ($ 2 ब्रांड्स के दूसरे सेट से मेल खाता है - यदि दिया गया है)

उदाहरण के लिए, नियमित अभिव्यक्ति कुछ भी "index.php" या "phpinfo.php" आदि से मेल नहीं खाती है, इसलिए, फिर से लिखने की स्थिति पारित की जाती है अनुरोधित यूआरएल उनमें से एक नहीं है, और मिलान अनुभाग फिर से लिखने के लिए पारित किया जाता है।

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