2010-02-03 7 views
5

मैं एक वैकल्पिक अनुगामी forwardslash शामिल करने की जरूरत है कि एक/है, मेरी RewriteRule में आवश्यकता.htaccess नियमित अभिव्यक्ति आगे पीछे चल बनाने के लिए स्लेश वैकल्पिक

क्या मैं अब तक है

RewriteRule ^([a-zA-Z0-9]+)$ u.php?$1|$2 

कौन सा ठीक काम करता है है , उदाहरण के लिए http://foo.bar/abcdehttp://foo.bar/u.php?abcde पर रीडायरेक्ट करेगा और मौजूद होने वाले किसी भी क्वेरीस्ट्रिंग पैरामीटर को संभाल सकता है।

मैं क्या करने की जरूरत ले http://foo.bar/abcde/ (अनुगामी forwardslash के साथ) और करने के लिए http://foo.bar/u.php?abcde

तो, अपने वर्तमान अगर, मैं अपने RewriteRule में $ 1 से अंतिम फ़ॉरवर्ड स्लैश हटाने की जरूरत है अनुप्रेषित है। मैं यह कैसे करु? मैं अपाचे के लिए नया हूं और कई अलग-अलग रेगेक्स नियमों की कोशिश की है लेकिन इसे सही नहीं मिल सकता है।

उत्तर

14

बस अपने पैटर्न में अंत में $ से पहले /? डाल:

RewriteRule ^([a-zA-Z0-9]+)/?$ u.php?$1 

लेकिन मैं नहीं बल्कि आप बस एक वर्तनी (के साथ या स्लेश अनुगामी के बिना) की अनुमति के लिए सुझाव है और पुन: निर्देशित एक दूसरे:

# remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ /$1 [L,R=301] 
# add trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ /$0/ [L,R=301] 
+0

@ फिल: नहीं, यह संभव नहीं है। केवल एक चीज जो आप कर सकते हैं उसे या तो इसे हटाने या सभी अनुरोधों में जोड़ने के लिए है। – Gumbo

+0

असल में जो मैं इसे प्राप्त करने की कोशिश कर रहा हूं, उसके लिए दोनों वर्तनी की अनुमति देने के लिए और अधिक समझदारी होती है, इसलिए मैं अब तक दो पुनर्लेखन नियमों का उपयोग करने जा रहा हूं, जब तक कि मैं 'रिवाइटकंड' के साथ जो सुझाव देता हूं उसे पूरी तरह समझ नहीं पाता। – Phil

+1

@ फिल: दोनों स्थितियां केवल उन अनुरोधों को पुनर्निर्देशित करने से बचती हैं जिन्हें मौजूदा निर्देशिकाओं ('-d') या मौजूदा फ़ाइलों ('-f') में मैप किया जा सकता है। – Gumbo

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