2010-05-14 14 views
7

mod_rewrite के साथ स्थिर HTML फ़ाइलों के लिए अर्थपूर्ण यूआरएल हमेशा मुझे परेशान करता है ... क्या कोई मुझे निम्नलिखित क्लीन यूआरएल प्राप्त करने के लिए नियमों को बता सकता है? बाईं ओर वांछित यूआरएल, दाईं ओर असली यूआरएल।.htaccess और mod_rewrite

/our-work/ => /our-work.html 
/our-work/some-project/ => /our-work/some-project.html 
/contact/ => /contact.html 

आप देख सकते हैं, मैं भी किए गए सभी URL पर ट्रेलिंग स्लैश बाध्य करना चाहते हैं।

धन्यवाद!

उत्तर

10

इस नियम का प्रयास करें:

RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^(.+)/$ $1.html [L] 

और अनुगामी जोड़ने के लिए स्लैश:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301] 

उन नियमों कि एक बाहरी रीडायरेक्ट का कारण डाल करने के लिए सुनिश्चित करें कि में (स्पष्ट रूप से आर झंडा या परोक्ष उपयोग करते हुए) उन नियमों के सामने जो केवल आंतरिक पुनर्निर्देशन/पुनर्लेखन का कारण बनते हैं। तो इस मामले में:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301] 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^(.+)/$ $1.html [L] 
+0

धन्यवाद। यह शीर्ष स्तर/हमारे काम/उदाहरण के लिए काम करता है लेकिन मुझे /redirect:/our-work/some-project.html.html.html/ जैसे यूआरएल पर रीडायरेक्ट करता है जब मैं दो स्तरों के साथ यूआरएल मार रहा हूं जैसे/हमारे के काम/कुछ-परियोजना /। मुझे यह भी कहना चाहिए कि मैं फिलहाल बंदरगाहों के साथ स्थानीयहोस्ट यूआरएल पर इसका उपयोग कर रहा हूं। – alistairholt

+0

बस किसी अन्य वातावरण में परीक्षण किया गया, पागल रीडायरेक्ट यूआरएल कहीं और से एक समस्या थी, कोई विचार नहीं। आपका समाधान सही धन्यवाद है! – alistairholt

+1

@ alistair.mp: आह, तुम सही हो। मैंने एक शर्त जोड़ा है जो परीक्षण करता है कि पुनरावृत्ति अनंत रिकर्सन से बचने के लिए मौजूदा फ़ाइल को इंगित करेगी या नहीं। – Gumbo

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