2010-01-04 14 views
16

के साथ केस असंवेदनशील यूआरएल मैं किसी भी यूआरएल के लिए चाहता हूं जो किसी मौजूदा फ़ाइल को नहीं दबाता है, अन्य संभावित मामलों पर एक लुकअप करने के लिए और देखें कि क्या फ़ाइलें मौजूद हैं, और यदि ऐसा है, तो 302 उनके लिए।mod_rewrite

अगर यह संभव नहीं है, तो मैं ठीक इन समझौतों के साथ कर रहा हूँ:

  • केवल छोटे संस्करण
  • जाँच केवल पहले पथ भाग जाँच

उदाहरण http://example.com/CoOl/PaTH/CaMELcaSE की ओर ही रीडायरेक्ट के लिए http://example.com/cool/path/camelCase (माना जाता है कि उत्तरार्द्ध मौजूद है)।

लेकिन निश्चित रूप से एक पूर्ण समाधान और अधिक मुझे और दूसरों

+1

मैं 302 से 301 का उपयोग करना चाहता हूं। – Gumbo

उत्तर

20
CheckSpelling on 

फ़ाइलें और निर्देशिकाएं मेल खाते हैं। विवरण के लिए documentation देखें।

+0

क्या हाल के संस्करणों के बराबर है? – icedwater

+0

@icedwater यह अभी भी काम कर रहा है। – fuxia

+0

उस तरह से प्रतीत नहीं हुआ; मेरे पास उबंटू 12.04 एलटीएस, अपाचे 2.2.22 है और '$ APACHE/mods-enabled /' में speling.load और speling.conf के प्रतीकात्मक लिंक बनाना गलत केस के साथ फ़ोल्डर नामों की अनुमति नहीं देता है। (बेशक, speling.load और speling.conf स्थापित हैं ... शायद मुझे एक और सवाल पोस्ट करना चाहिए।) – icedwater

0

अपाचे मॉड्यूल mod_negotiation को देखने के लिए उपयोगी है। यह वही करता है जो आप चाहते हैं: http://httpd.apache.org/docs/2.0/mod/mod_negotiation.html#multiviews

आप सभी अनुरोधों को एक ही PHP फ़ाइल में पाइप कर सकते हैं और PHP फ़ाइल को आपके लिए जांच कर सकते हैं।

+0

यह करीब है लेकिन अधिकतर एक्सटेंशन जोड़ने के लिए लगता है। 'Foo' के अनुरोध की तरह 'foo.xml' या' foo.html' बन जाता है। मैं टाइपो को ठीक करने की कोशिश कर रहा हूं। –

4

मैं अपाचे परीक्षण करने के लिए आसान नहीं है, लेकिन इन नियमों के कुछ संयोजन आप क्या चाहते हैं करना चाहिए:

 
RewriteEngine on 
RewriteMap lower int:tolower 
RewriteCond ${lower:%{REQUEST_URI}} -U 
RewriteRule [A-Z] ${lower:%{REQUEST_URI}} [R=302,L] 
  • एक लोअरकेस नक्शा/कुछ कन्वर्ट करने के लिए/कुछ
  • एक शर्त देखने के लिए अगर REQUEST_URI की लोअरकेस मौजूद है (यू है आंतरिक अपाचे क्वेरी)
  • नियम वास्तव में फिर से लिखने के लिए

मुझे नहीं पता कि रिवाइटमैप को किसी शर्त में लागू किया जा सकता है, या यदि यह केवल नियम पर लागू होता है। ये experts exchange accepted answer और a small orange forum discussion पर आधारित हैं।

आपका "आदर्श" समाधान शायद तब तक संभव नहीं है जब तक कि आप अपनी साइट पर प्रत्येक मान्य पृष्ठ का आकलन नहीं कर सकते। यदि आपके पास केवल कुछ वैध पृष्ठ हैं, तो RewriteMap का संयोजन और एक टेक्स्ट मैप वही करेगा जो आपको चाहिए। यदि सैकड़ों/हजारों पृष्ठ हैं तो आपको एक स्क्रिप्ट लिखने और prg निर्देश का उपयोग करने की आवश्यकता हो सकती है।

यदि आप प्रत्येक वैध पृष्ठ की पहचान नहीं कर सकते हैं, तो आपको मामले में हर प्रकार का प्रयास करने की आवश्यकता होगी। अपने यूआरएल को बाइनरी स्ट्रिंग के रूप में देखें, 0 के साथ लोअरकेस अक्षर और 1 अपरकेस के लिए। बस अपने सरल उदाहरण से आपको 2^17 विविधताएं, 128 के पेजों का परीक्षण करना होगा।