2013-04-18 5 views
8

मैं नए अपाचे httpd 2.4 को बहुत सी अच्छी चीजें के साथ प्यार करता हूं!Apache regex बैकरेक्शंस httpd 2.4 में अपरिवर्तनीय?

ap_expr इन नए बहुत आशाजनक सुविधाओं में से एक है,

..लेकिन निम्नलिखित लघु उद्योग झलकी अपेक्षा के अनुरूप काम नहीं है:

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$1"}} 
{{endif}} 

काम कर रहा है, लेकिन अगर वर 'isn टी सेट! यह कोई समझ नहीं आता है।

error.log का कहना है:

.. AH01330: regex capture $1 is out of range 

डॉक (http://httpd.apache.org/docs/2.4/expr.html#other) भ्रामक है और कोई नमूने कहीं भी पास नहीं है।

मैं जानता हूँ कि लघु उद्योग के लिए एक विरासत (वैकल्पिक हल) स्विच है कि वहाँ .. लेकिन मैं वर्ष आरंभ के बाद से इसका इस्तेमाल नहीं करना चाहते हैं और अंत टैगLegacy

मजबूर हैं समान regex-पार्स करने से -tricks डब्ल्यू SetEnvIfExpr मदद नहीं कर रहा है या तो

+2

काम करने के लिए लगता है का उपयोग कर समस्या को हल करने कर सकते हैं "वे सामान्य रूप से केवल मिलान regex के रूप में ही अभिव्यक्ति में इस्तेमाल किया जा सकता है, लेकिन कुछ मॉड्यूल विशेष उपयोगों के लिए अनुमति देते हैं।" मुझे लगता है कि यह मुद्दा है, और आपको "समान" अभिव्यक्ति में असाइनमेंट फिट करना होगा, जो भी डोमेन है। –

उत्तर

0

documentation के अनुसार:

नियमित अभिव्यक्ति backreferences तार $ 0 ... $ 9 कैप्चर समूहों को संदर्भित करने की अनुमति पहले निष्पादित, सफलतापूर्वक नियमित अभिव्यक्तियों से मेल खाते हैं। वे आम तौर पर मिलान के रेगेक्स के समान अभिव्यक्ति में उपयोग किए जा सकते हैं, लेकिन कुछ मॉड्यूल विशेष उपयोग की अनुमति देते हैं।

आप एक कैप्चरिंग समूह उपयोग कर रहे हैं और आप संदर्भित कर रहे है कि सूचकांक 1 का उपयोग कर, यह एक मानक regex इंजन का उपयोग कर ठीक होना चाहिए, लेकिन प्रलेखन आप $0...$9 से संदर्भित कर सकते हैं के अनुसार। मुझे लगता है कि अपाचे 1 के बजाय अपने कैप्चरिंग समूह के साथ स्वतंत्र 0 भरने है और है कि आप का उपयोग करके $0 करने के लिए regex capture $1 is out of range

बदलें सूचकांक $1 प्राप्त होते हैं:

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$0"}} 
{{endif}} 
+0

ऐसा लगता है, लेकिन मुझे नहीं लगता कि अपाचे देव पहिया को फिर से शुरू करेंगे! – hjpotter92

+0

@ hjpotter92 lol क्षमा करें आदमी ... सोचा था कि आपने –

1

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
    {{set var="user" value="$1"}} 
{{endif}} 

बदलकर

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
    {{set var="user" value="$0"}} 
    {{if expr="v('user') =~ /([^&]+)$/"}} 
     {{set var="user" value="$0"}} 
    {{endif}} 
{{endif}} 

एक तथ्य यह है कि $ 0

+0

एक जीवन सुरक्षित रखा है!(वास्तव में नहीं, लेकिन इससे मुझे बहुत मदद मिली) – Mchl

0
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/ && $1 =~ /(.+)/"}} 
    {{set var="user" value="$0"}} 
{{endif}} 
+0

यह सिर्फ कोड का एक ढेर है जो अन्य उत्तरों में कोड के लगभग समान है। इस कोड के लिए उपयोगी होने के लिए यह एक स्पष्टीकरण होना चाहिए कि यह क्या करता है और यह सवाल का जवाब क्यों देता है। यह देखते हुए कि यह अन्य उत्तरों में कोड के समान है, यह भी समझाएगा कि यह उनके लिए अलग क्यों है। – AdrianHHH

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