Как сказал Влад: ваше второе условие будет ограничивать правило, только если оба условия соблюдены, правило будет применяться. Второе условие требует применения правила только в том случае, если URI не начинается с двух символов верхнего регистра, за которыми следуют два символа нижнего регистра. Таким образом, /GB/en/cat/PRODUCT/...
не будет соответствовать, поскольку второе условие не выполняется. Это означает, что правило не применяется и верхний регистр PRODUCT
не фиксируется. Вы можете просто удалить это второе условие, поскольку ваше правило не изменяет правильные символы в регистре.
Как уже было сказано rakhi4110, ваша третья группа в вашем rewriterule: (.*)
будет включать / после двух букв языка, поэтому, если вы завершите правило /${tolower:$3}
, вы закончите с двумя косыми чертами в URI, чтобы исправить это, вы можете либо удалить sla sh в конце, либо добавить один между группами 2 и 3:
RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})/(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]
или
RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})(.*) "/${toupper:$1}/${tolower:$2}${tolower:$3}" [R=301,L]
(IMO первый - более чистый код)
Итак, в заключение, должно работать следующее:
RewriteCond %{ENV:PAGE_REQUEST} ^true$
RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})/(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]