Force lowercase URLs, especially important for SEO on Windows-based servers, which are case-insensitive; not implementing this rule on Windows servers can lead to duplicate content penalties in search engines.

Using httpd.conf (preferred)

For Apache, this rule is best done within httpd.conf rather than .htaccess for performance reasons. Ensure httpd.conf has:

RewriteEngine on
RewriteBase /

Then, add the following below that in httpd.conf:

RewriteMap lowercase int:tolower
RewriteCond $1 [A-Z]
RewriteRule ^/?(.*)$ /${lowercase:$1} [R=301,L]

For SEO purposes, this type of redirect should be Permanent (301).

Using .htaccess

You may still enable this rule from within .htaccess if you choose to do so, as follows.

Then, add the following below that in .htaccess, above any other rewrite rules:

# If there are caps, set HASCAPS to true and skip next rule
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]

# Skip this entire section if no uppercase letters in requested URL
RewriteRule ![A-Z] - [S=28]

# Replace single occurrence of CAP with cap, then process next Rule.
RewriteRule ^([^A]*)A(.*)$ $1a$2
RewriteRule ^([^B]*)B(.*)$ $1b$2
RewriteRule ^([^C]*)C(.*)$ $1c$2
RewriteRule ^([^D]*)D(.*)$ $1d$2
RewriteRule ^([^E]*)E(.*)$ $1e$2
RewriteRule ^([^F]*)F(.*)$ $1f$2
RewriteRule ^([^G]*)G(.*)$ $1g$2
RewriteRule ^([^H]*)H(.*)$ $1h$2
RewriteRule ^([^I]*)I(.*)$ $1i$2
RewriteRule ^([^J]*)J(.*)$ $1j$2
RewriteRule ^([^K]*)K(.*)$ $1k$2
RewriteRule ^([^L]*)L(.*)$ $1l$2
RewriteRule ^([^M]*)M(.*)$ $1m$2
RewriteRule ^([^N]*)N(.*)$ $1n$2
RewriteRule ^([^O]*)O(.*)$ $1o$2
RewriteRule ^([^P]*)P(.*)$ $1p$2
RewriteRule ^([^Q]*)Q(.*)$ $1q$2
RewriteRule ^([^R]*)R(.*)$ $1r$2
RewriteRule ^([^S]*)S(.*)$ $1s$2
RewriteRule ^([^T]*)T(.*)$ $1t$2
RewriteRule ^([^U]*)U(.*)$ $1u$2
RewriteRule ^([^V]*)V(.*)$ $1v$2
RewriteRule ^([^W]*)W(.*)$ $1w$2
RewriteRule ^([^X]*)X(.*)$ $1x$2
RewriteRule ^([^Y]*)Y(.*)$ $1y$2
RewriteRule ^([^Z]*)Z(.*)$ $1z$2

# If there are any uppercase letters, restart at very first RewriteRule in file.
RewriteRule [A-Z] - [N]

RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]

For SEO purposes, this type of redirect should be Permanent (301).

In More Detail

It is extremely important for SEO to avoid duplicate content. From a search engine perspective, two URLs whose sole difference is a single capitalized letter will be interpreted as two distinctly different URLs. On Windows servers, or a web application that treats URLs as case-insensitive, this will result in example.com/mywebpage and example.com/MyWebPage as being two distinctly different urls which return the exact same content; hence, duplicate content penalty.

To avoid these penalties, and to simply know which case a url/link might be in, it’s best to standardize on all lowercase URLs, removing any ambiguity about it. Missing those CamelCase or lowerCamelCase URLs? Fine, choose hyphenated urls instead: camel-case and lower-camel-case. They’re just as readable, and actually perform better from an SEO standpoint since they’re tokenized on the hyphens.