2010-05-27 43 views
10

Tôi muốn các URL như server.com/foo trở nên phân biệt chữ hoa chữ thường. Nhưng server.com/foo thực sự được mod_rewrite'd để server.com/somedir/fooChuyển đổi sang chữ thường theo quy tắc mod_rewrite

(Giả định rằng tất cả các file trong "somedir" là chữ thường.)

Vì vậy, câu hỏi là, làm thế nào để hoàn thành một mod_rewrite như sau:

RewriteRule ^([^/]+)/?$ somedir/convert_to_lowercase($1) 

PS: đây là một tiện dụng mod_rewrite cheat sheet - http://dreev.es/modrewrite - mặc dù nó không trả lời câu hỏi đặc biệt này.

PPS: Nhờ BeeIgnacio cho tất cả sự giúp đỡ với điều này. Ngoài ra, đây là một câu hỏi liên quan: RewriteMap activation

Trả lời

14

Đầu tiên, đặt dòng sau trong phần <VirtualHost> file conf của bạn. (Đối với tôi sống tại /etc/httpd/vhosts.d/00foo.conf.)

RewriteMap lc int:tolower 

Bạn có thể thay lc với bất kỳ tên nào bạn muốn. Sau đó khởi động lại apache, bạn có thể thực hiện với sudo service httpd restart.

Cuối cùng, thêm này trong tập tin .htaccess của bạn:

RewriteRule ^/(.*)$ /${lc:$1} 
+0

Hoạt động ở đây. Bạn đã trả lại httpd chưa? –

+0

Có lẽ là không. Điều đó nghĩa là gì? – dreeves

+0

Khởi động lại. Gửi SIGHUP hoạt động trên POSIX. –

10
RewriteMap tolower int:tolower 
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1} 
+1

Ah, cảm ơn, nó bây giờ phù hợp với những gì tôi tìm thấy ở nơi khác trên web trong khi chờ đợi, nhưng nó vẫn không hoạt động đối với tôi. Tôi không hiểu nhận xét khác của bạn về việc nảy lên httpd. – dreeves

+0

Tôi đã thử thêm phần trên vào tệp .htaccess và khởi động lại httpd, đồng thời đưa toàn bộ miền xuống. Nhật ký lỗi cho biết: "Rewritemap not allowed here". Trường hợp cụ thể tôi phải đặt câu lệnh Rewritemap? Tài liệu tôi tìm thấy cho thấy nó là hai dòng liên tiếp, như trên. (Tôi chỉ cần gắn nó trong .htaccess ngay trên RewriteRule cụ thể). – Bee

+1

@Bee: Các tài liệu nói "cấu hình máy chủ, máy chủ ảo", có nghĩa là phải trong luồng cấu hình chính hoặc trong chỉ thị ''. http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap –

2

tôi sẽ làm cho nó một chuyển hướng 301, KHÔNG phải là một URL viết lại, vì mục đích SEO:

RewriteMap tolower int:tolower 
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1} [R=301,L] 
+3

Một tiêu đề 301 không có bộ nhớ cache hết hạn là thực hành rất tồi vì nó được lưu trong bộ nhớ cache * cho bao giờ * trong trình duyệt. Bạn sẽ sống với các hiệu ứng của nó trong nhiều năm. Thay đổi 'R = 301, L' thành' R = 301, L, E = limitcache: 1' và thêm lệnh 'max-age = 3600" env = limitcache' 'Header luôn đặt. Điều đó sẽ hạn chế bộ nhớ đệm đến 1h trong khi vẫn mang lại cho bạn những lợi thế SEO của một chuyển hướng 301. –

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