2009-05-08 8 views
5

RewriteCondरीवाइटकॉन्ड में उपनिर्देशिका से कैसे मिलान करें?

RewriteCond %{REQUEST_URI} !^/foo/ 

के लिए उचित regex में समस्या हो रही निर्माण की उम्मीद के रूप में, कि है, सभी URL के साथ/foo/शुरू करने के लिए फिर से लिखने निम्नलिखित लागू नहीं होता।

RewriteCond %{REQUEST_URI} !^/foo/bar/ 

दूसरी तरफ मेरी अपेक्षा के अनुसार काम नहीं करता है। यूआरएल जो/foo/bar/से शुरू होते हैं उन्हें अभी भी लिखा जा रहा है।

उपनिर्देशिका को छोड़कर मैं उचित रेगेक्स कैसे दर्ज करूं?

+0

वास्तविक नियम कैसे लग रहे हो पसंद? – Gumbo

+0

यह काम करना चाहिए। क्या आप कम से कम 3 के रिवाइट लॉजवेल के साथ एक रिवाइटलॉग सेट कर सकते हैं और इसे अपने प्रश्न में जोड़ सकते हैं? –

उत्तर

7

शायद यह एक आंतरिक रीडायरेक्ट का नया यूआरएल है जिस पर नियम लागू होता है। L flag वह करता है।

[...] अगर RewriteRule एक आंतरिक पुन: निर्देशित (जो अक्सर जब एक प्रति-निर्देशिका संदर्भ में पुनर्लेखन होता है) उत्पन्न करता है, इस अनुरोध को reinject जाएगा और कारण होगा प्रसंस्करण पहले RewriteRule से शुरू दोहराया जाना।

आप यह सुनिश्चित करें कि प्रारंभिक URL पथ "/ foo/बार" के साथ शुरू नहीं किया बनाना चाहते हैं, जाँच request line (THE_REQUEST variable देखें) के बजाय:

RewriteCond %{THE_REQUEST} !^[A-Z]+\ /foo/bar/ 
RewriteRule … 
+0

पता नहीं कैसे और क्यों यह काम करता है – edgars

+0

@ गम्बो: क्या आप कृपया अपने सुझाव में उपयोग किए गए रेगेक्स को बिल्कुल समझा सकते हैं? यह मेरे लिए भी काम करता है, और मुझे लगता है कि यह पहले जीईटी से मेल खाता है, लेकिन बाद के '/' को समझ नहीं सकता है और कारण '/ foo/bar /' – Stratboy

+0

@Stratboy से पहले कोई डोमेन नहीं है, मैंने लिंक किए गए पृष्ठों की आशा की है सब कुछ समझाओ। खैर, पैटर्न '^ [ए-जेड] + \/foo/bar/'सर्वर के HTTP पार्सर द्वारा देखी गई HTTP अनुरोध लाइन की जांच करता है और स्थिति केवल तभी सत्य होती है जब पैटर्न मिलान नहीं होता है। शायद यह '\' है जो आपको परेशान करता है लेकिन यह अभी भी पैटर्न का हिस्सा है। – Gumbo

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