skip to Main Content

I am trying to convert all my uppercase URL’s to lower case and add a redirect rule for it but its not working. here is what my use case is

https://www.example.com/CT 301 redirect to => https://www.example/test
https://www.example.com/cT 301 redirect to => https://www.example/test
https://www.example.com/ct 301 redirect to => https://www.example/test

I have been testing the below rule in https://htaccess.madewithlove.be/ and if I test the URL https://example.com/Ct with the rule the output URL is still https://example.com/Ct, it should have been https://example.com/ct. What I have noticed is it will convert Captial C into lower c but this rule RewriteRule [A-Z] - [N] is coverting it back to https://example.com/Ct

<IfModule mod_rewrite.c>
  RewriteEngine on

RewriteBase /
# 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 occurance 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]
# If a conversion has occurred then issue an external redirect
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [N]

RewriteCond %{HTTP_HOST} ^((?:www.)?example.com)$ [NC]
RedirectMatch 301 ^/ct$ https://www.example/test

</IfModule>

Any help is appreciated on identyfying what is wrong with this rule.

2

Answers


  1. Use RewriteMap https://httpd.apache.org/docs/2.4/rewrite/rewritemap.html#int

    The RewriteMap directive defines an external function which can be called in the context of RewriteRule or RewriteCond directives to perform rewriting that is too complicated, or too specialized to be performed just by regular expressions.

    The docs provide this example for lower-casing the URL

    Redirect a URI to an all-lowercase version of itself

    RewriteMap lc int:tolower
    RewriteRule "(.*)" "${lc:$1}" [R]
    
    Login or Signup to reply.
  2. If either of /CT, /cT, /Ct, /ct has to redirected to /test/ then it can done in a simple rule like this with NC flag:

    RewriteRule ^ct/?$ /test [L,NC,R=301]
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search