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 answer và a 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.
Tôi thà sử dụng 301 hơn 302. – Gumbo