2010-01-04 40 views
16

Tôi muốn có bất kỳ url nào không truy cập tệp hiện có, để tra cứu các trường hợp có thể khác và xem liệu các tệp đó có tồn tại hay không, và nếu có, 302 cho chúng.URL không phân biệt chữ hoa chữ thường với mod_rewrite

Nếu đó là không thể, thì tôi ok với những thỏa hiệp:

  • Chỉ kiểm tra phiên bản chữ thường
  • Chỉ kiểm tra phần đường dẫn đầu tiên

Ví dụ http://example.com/CoOl/PaTH/CaMELcaSE nên chuyển hướng đến http://example.com/cool/path/camelCase (giả sử sau này tồn tại).

nhưng tất nhiên giải pháp đầy đủ hữu ích hơn cho tôi và những người khác

+1

Tôi thà sử dụng 301 hơn 302. – Gumbo

Trả lời

20
CheckSpelling on 

So khớp tệp và thư mục. Xem chi tiết documentation.

+0

Có tương đương với các phiên bản mới hơn không? – icedwater

+0

@icedwater Nó vẫn đang hoạt động. – fuxia

+0

Không có vẻ như vậy; Tôi có Ubuntu 12.04 LTS, Apache 2.2.22 và tạo liên kết tượng trưng cho speling.load và speling.conf trong «$ APACHE/mods-enabled /' dường như không cho phép tên thư mục có sai sót. (Tất nhiên, speling.load và speling.conf được thiết lập ... có lẽ tôi nên đăng một câu hỏi khác.) – icedwater

0

Tra cứu mô đun mod_negiation của Apache. Nó thực hiện chính xác những gì bạn muốn: http://httpd.apache.org/docs/2.0/mod/mod_negotiation.html#multiviews

Bạn cũng có thể gửi tất cả các yêu cầu tới một tệp PHP duy nhất và để tệp PHP thực hiện việc kiểm tra cho bạn.

+0

Kết thúc nhưng dường như chủ yếu là để thêm tiện ích mở rộng. Giống như yêu cầu 'foo' trở thành' foo.xml' hoặc 'foo.html'. Tôi đang cố sửa lỗi chính tả. –

4

Tôi không có Apache tiện dụng để kiểm tra, nhưng một số sự kết hợp của các quy định này nên làm những gì bạn muốn:

 
RewriteEngine on 
RewriteMap lower int:tolower 
RewriteCond ${lower:%{REQUEST_URI}} -U 
RewriteRule [A-Z] ${lower:%{REQUEST_URI}} [R=302,L] 
  • Một bản đồ chữ thường để chuyển đổi/cái gì đó để/cái gì đó
  • Một điều kiện để xem nếu chữ thường của REQUEST_URI tồn tại (-U là truy vấn apache nội bộ)
  • các quy tắc để thực sự làm việc viết lại

Tôi không biết nếu RewriteMap có thể được áp dụng trong một điều kiện, hoặc nếu nó chỉ áp dụng cho một quy tắc. Chúng được dựa trên experts exchange accepted answera small orange forum discussion.

Giải pháp "lý tưởng" của bạn có thể là không thể trừ khi bạn có thể liệt kê mọi trang hợp lệ trên trang web của mình. Nếu bạn chỉ có một vài trang hợp lệ, kết hợp của RewriteMap và bản đồ văn bản sẽ thực hiện chính xác những gì bạn cần. Nếu có hàng trăm/nghìn trang bạn có thể cần phải viết một tập lệnh và sử dụng chỉ thị prg.

Nếu bạn không thể xác định mọi trang hợp lệ, bạn sẽ cần phải thử mọi biến thể trong trường hợp. Xem xét URL của bạn dưới dạng chuỗi nhị phân, với 0 cho chữ thường và 1 cho chữ hoa. Chỉ từ ví dụ đơn giản của bạn, bạn phải kiểm tra 2^17 biến thể, 128 nghìn trang.

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