Để thực hiện chuyển hướng như vậy bằng cách sử dụng mod_rewrite và .htaccess, bạn cần sử dụng lệnh RewriteMap
không thể được đặt trong .htaccess - chỉ trong bối cảnh cấu hình máy chủ / Virtualhost. Nếu bạn có quyền truy cập như vậy:
1. Đặt dòng này bên trong <VirtualHost>
khối cho trang web của bạn:
RewriteMap lc int:tolower
2. Đặt cái này trong .htaccess của bạn:
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule . ${lc:%{REQUEST_URI}} [R=301,L]
Điều này sẽ chuyển hướng (301 Chuyển hướng vĩnh viễn) bất kỳ URL nào có ít nhất 1 chữ in hoa (chỉ chữ Latinh) trong phần đường dẫn của URL (chuỗi truy vấn bị bỏ qua) về cùng nhưng trong trường hợp thấp hơn.
Ví dụ:
http://mydomain.com/myfolder-sample-URL.html
=>
http://mydomain.com/myfolder-sample-url.html
http://mydomain.com/myfolder-sample-url.HTML
=>
http://mydomain.com/myfolder-sample-url.html
nhưng sẽ không làm gì cho các URL này:
http://mydomain.com/myfolder-sample-url.html?say=MEOW
http://MYDOMAIN.com/myfolder-sample-url.html
Nếu bạn muốn giới hạn nó chỉ với các tệp .html:
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule ^.+\.html$ ${lc:%{REQUEST_URI}} [NC,R=301,L]
Nơi đặt: Tôi sẽ đặt nó sau quy tắc chuyển hướng tên miền:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule (.*) http://mydomain.com/$1 [L,R=301]
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule . ${lc:%{REQUEST_URI}} [R=301,L]
# your other rules
Tôi cũng khuyên bạn nên sử dụng các liên kết rel = "canonical" :
<link rel="canonical" href="PROPER_URL_HERE" />
Nếu bạn không cần chuyển hướng, mà là khả năng phục vụ tệp bất kể trường hợp tên tệp (trường hợp tên tệp không nhạy cảm), thì bạn có thể sử dụng mod_spelling ( http://httpd.apache.org/docs/civerse/mod/mod_speling .html ) và CheckCaseOnly On
chỉ thị.