2010-05-14 21 views
7

mod_rewrite luôn khiến tôi khó hiểu ... bất kỳ ai có thể cho tôi biết các quy tắc tôi cần để nhận các URL sạch sau đây không? URL mong muốn ở bên trái, URL thực ở bên phải.URL ngữ nghĩa cho các tệp HTML tĩnh có đuôi .htaccess và mod_rewrite

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

Như bạn có thể thấy, tôi cũng muốn buộc dấu gạch chéo trên tất cả các URL.

Cảm ơn!

Trả lời

10

Hãy thử quy tắc này:

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

Và để thêm dấu xuyệc:

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

Hãy chắc chắn để đưa những quy tắc mà gây ra một chuyển hướng bên ngoài (một cách rõ ràng bằng R cờ hoặc ngầm) trong trước các quy tắc đó chỉ gây ra chuyển hướng/ghi đè nội bộ. Vì vậy, trong trường hợp này:

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

Cảm ơn. Điều đó phù hợp với cấp cao nhất/công việc/ví dụ của chúng tôi nhưng kết thúc chuyển hướng tôi đến các URL như /redirect:/our-work/some-project.html.html.html/ khi tôi nhấn các URL với hai cấp độ như/- công việc/dự án /. Tôi cũng nên nói rằng tôi đang sử dụng điều này trên một URL localhost tại thời điểm này với các cổng được chỉ định. – alistairholt

+0

Chỉ cần thử nghiệm trong một môi trường khác, URL chuyển hướng điên là một vấn đề từ một nơi khác, không có ý tưởng ở đâu. Giải pháp của bạn là lời cảm ơn hoàn hảo! – alistairholt

+1

@ alistair.mp: Ah, bạn nói đúng. Tôi đã thêm điều kiện kiểm tra xem ghi đè sẽ trỏ đến tệp hiện có để tránh đệ quy vô hạn. – Gumbo

Các vấn đề liên quan