2009-04-03 33 views
5

जाहिर है वहाँ एक सीमा (9) कितने backreferences आप इनको RewriteRules में उपयोग कर सकते हैं पर है ..मानकों/backreferences सीमा की mod_rewrite संख्या

लेकिन हम, की तरह कुछ एक फिर से लिखना है कि 9 से अधिक मापदंडों की आवश्यकता है इस:

RewriteRule ^([^/]+)/b([0-9]+)(/a([0-9]+))?(/v([0-9]+))?(,([0-9]+))?(/(ajax|share))?(,complete)?$ /index.php?control=sites&site=brands&control_file=version_select&name=$1&campaign_id=$2&answer=$4&page=$8&option=$10&video_id=$6&page_type=research [L] 

तो क्या होता है जब आप, "$ 10" तक पहुँचने का प्रयास है कि यह $ 1 का उपयोग करता है और एक 0 यह के ठीक बगल डालता है।

क्या कोई इस समस्या को हल करने में सक्षम है, कोई वैकल्पिक समाधान या कुछ भी?

धन्यवाद!

उत्तर

17

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

 
Yours:      Mine: 
------------------------- --------------------------- 
^([^/]+)/b   $1  ^([^/]+)/b   $1 
([0-9]+)   $2  ([0-9]+)    $2 
(/a([0-9]+))?  $4  (?:/a([0-9]+))?  $3 
(/v([0-9]+))?  $6  (?:/v([0-9]+))?  $4 
(,([0-9]+))?  $8  (?:,([0-9]+))?  $5 
(/(ajax|share))? $10!  (?:/(ajax|share))? $6 
(,complete)?$  $11!  (,complete)?$   $7 

लेकिन अकेले mod_rewrite के साथ, आप 9 से अधिक संदर्भों में नहीं जा सकते हैं। यदि आपको और अधिक चाहिए, तो एक विकल्प का उपयोग करें - उदाहरण के लिए पुनः लिखने में केवल सबसे महत्वपूर्ण भागों को कैप्चर करना और अपने ऐप के बाकी यूआरएल के साथ कुछ स्ट्रिंग-प्रोसेसिंग करना।

+1

आप मेरे आज के नायक हैं – Korcholis

5

एक समाधान कैप्चर बिना, एक ही regex का उपयोग, और यह अनुरोध भेज index.php को

फिर फ़ॉरवर्ड स्लैश द्वारा अनुरोध URI विस्फोट के लिए index.php उपयोग करने के लिए हो सकता है और आप के साथ वहाँ से काम कर सकते हैं आँकड़े।

9

एक, हालांकि सुंदर गूंगा, विचार दो चरणों में फिर से लिखना होगा, यानी श्रृंखला दो RewriteRule एस पहले नियम के साथ इसे कुछ मध्यवर्ती प्रारूप में फिर से लिखना होगा।

+1

+1, क्योंकि यद्यपि (जैसा कि आप इंगित करते हैं) एक "गूंगा" विचार है, यह वास्तव में एक मान्य है। – UnkwnTech

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