मैं वर्तमान में काम कर रहा मॉड पुनर्लेखन Regex है:मॉड पुनर्लेखन Regex - या अधिक नकारात्मक Lookaheads
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)?((?:cmd)[^/]*)/((?!(?:cmd)[.+]*)(.+)) $1?$2=$3&%1 [L]
regex निम्न URL लेता है और यूआरएल तुरंत नीचे में बदल देती है कि:
www.site.com/cmd1/param/cmd2/param2/stillparam2
और इसे चालू में www.site.com/index.php?cmd1=param&cmd2=param2/stillparam2
यह ठीक काम करता है, लेकिन मैं यह सुनिश्चित करने के लिए एक और नकारात्मक लुकहेड दावा करना चाहूंगा कि एक यूआरएल ब्लॉक - यानी /texthere/
परम - अंडरस्कोर शामिल नहीं है। एक अमान्य स्ट्रिंग इस तरह दिख सकती है: www.test.com/cmd/thing/getparam_valuehere
; रेगेक्स को cmd/thing
को एक कुंजी और मूल्य जोड़ी के रूप में पार्स करना चाहिए और शेष स्ट्रिंग को अनदेखा करना चाहिए। इसके बाद मैं अंडरस्कोर के साथ यूआरएल के ब्लॉक को एक और यूआरएल पैरामीटर के रूप में जोड़ा जाने के लिए एक और रिवाइटरूल लिखूंगा। निम्नलिखित यूआरएल अनुवाद होगा:
www.test.com/cmd/param1/cmd2/directory/param2/sortorder_5
www.test.com?cmd=param1&cmd2=directory/param2&sortorder=5
कृपया मुझे बताएं कि क्या मैं पर्याप्त स्पष्ट नहीं हूं। कोई भी मदद बहुत अच्छी रहेगी।
एनबी: मैं एक नकारात्मक अग्रदर्शी पहले से ही मौजूद एक के अंदर नेस्टेड का उपयोग कर की कोशिश की है - (?!(?!))
- और एक |
दो पर नकारात्मक lookaheads उपयोग करने की कोशिश की है, लेकिन न तो समाधान काम किया। मैंने सोचा कि शायद कुछ और मौलिक रूप से गलत था?
धन्यवाद सब कुछ।
संपादित करें: मैं भी निम्नलिखित की कोशिश की है - जो मैं वास्तव में सोचा था काम करेगा (लेकिन स्पष्ट रूप से, नहीं था!)
RewriteRule ^(.*/)?((?:cmd)[^/]*)/((?!(?:cmd)[.+]*)(?![.+]*(?:_)[.+]*)(.+)) $1?$2=$3&%1 [L]
कि निम्नलिखित है:
www.test.com/cmd/param1/sortorder_1/
करने के लिए अनुवाद www.test.com?cmd=param1/sortorder_1/
जब इसे इसके बजाय बनना चाहिए: www.test.com?cmd=param1&sortorder=2/
। /sortorder_2/
को &sortorder=2
में अनुवाद करने का नियम अभी तक नहीं बनाया गया है, लेकिन आप उम्मीद कर सकते हैं कि मेरा क्या मतलब है)।
_Lookbehinds_ निरंतर लंबाई का होना चाहिए, परिवर्तनीय-लंबाई लुकहेड ठीक होना चाहिए। – MRAB
हां, निश्चित रूप से यहां केवल नकारात्मक दिखने का उपयोग किया जा रहा है। उत्तर के लिए धन्यवाद! – Pete171
मैंने निम्नलिखित भी कोशिश की है: 'रिवाइट्रूल^(। * /)? ((?: cmd) [^ /] *)/((?! (?: [ए-ज़ा-जे 0-9]) * _ + (?: [ए-ज़ा-जे 0-9]) *) (। +)) $ 1? $ 2 = $ 3 और% 1 [एल] '। यहां, मैंने मूल (काम कर रहे) नकारात्मक लुकहेड को हटा दिया है और इसे किसी दूसरे के साथ बदल दिया है, यह सुनिश्चित करना चाहिए कि पैरामीटर के हिस्से के रूप में इसे शामिल करने से पहले एक यूआरएल ब्लॉक में अंडरस्कोर मौजूद न हो। यह काम नहीं किया, और निम्न क्वेरी स्ट्रिंग उत्पन्न: 'cmd = कुंजी/to/आदेश/value_here/sortorder_5 /' यह था मेरा इरादा इसे रोकने के लिए '/ value_here /' ताकि मैं मान्य सकता है ऋणात्मक लुकहेड अंडरस्कोर सेगमेंट को सही तरीके से पाता है। कोई भाग्य नहीं। – Pete171