2009-06-12 11 views
11

मैं सुंदर यूआरएल बनाने के लिए mod_rewrite का उपयोग करना चाहता हूं, लेकिन .htaccess फ़ाइल का एक संस्करण है जिसका उपयोग सर्वर पर किसी भी उपयोगकर्ता के लिए किया जा सकता है।mod_rewrite का उपयोग कर .htaccess से वर्तमान निर्देशिका का संदर्भ कैसे लें?

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$  /index.php/$1 [L] 

आदर्श रूप में, मैं

RewriteRule ^(.*)$  %{URL of this file's directory}/index.php/$1 [L] 

को कुछ इसी तरह चाहते हैं यह प्रलेखन मुझे नेतृत्व को लगता है कि मैं क्या चाहता हूँ नहीं है जाएगा:

अब तक मैं मानक सुंदर यूआरएल .htaccess है आवश्यक:

नोट: प्रति-निर्देशिका con में पैटर्न मिलान पाठ कभी नहीं भूलें कि प्रति सर्वर कॉन्फ़िगरेशन फ़ाइलों में पूर्ण URL पर पैटर्न लागू किया गया है। हालांकि, प्रति-निर्देशिका कॉन्फ़िगरेशन फ़ाइलों में, प्रति-निर्देशिका उपसर्ग (जो हमेशा एक विशिष्ट निर्देशिका के लिए समान होता है) स्वचालित रूप से पैटर्न मिलान के लिए हटा दिया जाता है और प्रतिस्थापन के बाद स्वचालित रूप से जोड़ा जाता है। यह सुविधा कई प्रकार के पुनर्लेखन के लिए आवश्यक है - इसके बिना, आपको हमेशा मूल निर्देशिका से मेल खाना पड़ेगा जो हमेशा संभव नहीं होता है।

मैं अभी भी, गलत परिणाम प्राप्त हालांकि, या नहीं, मैं एक अग्रणी/RewriteRule पर index.php के सामने रख दिया।

यह

http://server/test/stream/stream

http://server/index.php/stream

नहीं

http://server/test/index.php/stream

जब .htaccess फ़ाइल में/परीक्षण/है में बदल जाता है।

+0

इसके अलावा https://stackoverflow.com/q/4704508/632951 – Pacerier

उत्तर

2

यह बताता है कि इससे कोई फर्क नहीं पड़ता कि मैं index.php के सामने अग्रणी हूं या नहीं। इसे छोड़कर, स्क्रिप्ट सही ढंग से काम करती है। मैं आर फ्लैग के साथ परीक्षण कर रहा था जो रीडायरेक्ट पर भौतिक निर्देशिकाओं का उपयोग कर रहा था।

+0

हाँ, ** लेकिन ** [यह है छोड़ना आप पर निर्भर कर रहे हैं द्वारा rewritebase का मान] (https://stackoverflow.com/a/11443194/632951), जो ** ** आपके htaccess पैरेंट फ़ोल्डर नहीं हो सकता है। किसी भी मामले में, इसे छोड़कर एक हैकिश समाधान वास्तविक समाधान नहीं है। – Pacerier

8

मैं एक ऐसी ही समस्या हो रही थी, लेकिन पाया गया कि बस रूट है छोड़ना/'अपने परीक्षण वेब सर्वर में हुई (खिड़कियों पर XAMPP) के लिए इसी तरह एक यूआरएल की सेवा:

http://localhost/C:/xampp/htdocs/sites/test/

सही नहीं है। मेरा समाधान REQUEST_URI से पथ निकालने के लिए एक रिवाइटकंड का उपयोग करना है।

RewriteCond %{REQUEST_URI} ^(.*)/index.php$ 
RewriteRule index.php %1/ [r=301,L] 

नोट:: डॉलर चिन्ह "% 1 /" में प्रतिशत चिह्न के बजाय यहां URL के अंत से अवांछित "index.php" रों दूर करने के लिए एक उदाहरण है।

% 1-% 9 अंतिम मिलान वाले रिवाइटकंड से पैटर्न प्राप्त करता है, $ 1- $ 9 को रिवाइटरूले से पैटर्न प्राप्त होते हैं।

देखें: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

चीयर्स :)

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