Если вы имеете в виду «Я хочу переписать любой уровень , кроме шестой», то это должно сработать:
RewriteEngine On
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteCond %{REQUEST_URI} !^((/[^A-Z/]+){5})(/[^/]*[A-Z][^/]*)(/[^A-Z/]+)*/?$
RewriteRule ^((/[^/]+){1,5})((/[^/]+)((/[^/]+)*))? ${lc:$1}$4${lc:$5} [L,R=301]
(обратите внимание, что URL-адреса начинаются с «/», поскольку RewriteMap выиграл 'он не работает и поэтому, похоже, не работает в .htaccess для меня)
Это займет первые пять совпадений и их в нижнем регистре, затем оставит шестой как есть, затемон будет в нижнем регистре для любых последующих уровней (если они существуют).
Если вы когда-нибудь попадете только на 6 уровней (а шестой никогда не следует переписывать), тогда этого должно быть достаточно:
RewriteEngine On RewriteMap lc int: tolower RewriteCond% {REQUEST_URI} [AZ] RewriteCond% {REQUEST_URI}! ^ ((/ [^ AZ /] +) {5}) (/ [^ /] [AZ] [^/] ) /? $ RewriteRule ^ ((/ [^ /] +) {1,5}) (/ [^ /] +) /?$ {lc: $ 1} $ 4 [L, R = 301]
Протестировано с:
/monitors/services/awe/AWE --> /monitors/services/awe/awe
/monitors/services/awe/awe-prod/awr02.awe-prod.a/Read_job_245/ --> No change
/MONITORS/SERVICES/awe/awe-prod/awr02.awe-prod.a/Read_job_245/ --> /monitors/services/awe/awe-prod/awr02.awe-prod.a/Read_job_245/
/MONITORS/SERVICES/awe/awe-prod/awr02.awe-prod.a/Read_job_245/AAA/BBB/ --> /monitors/services/awe/awe-prod/awr02.awe-prod.a/Read_job_245/aaa/bbb/ (using 1st rule set)
Построчное объяснение:
#Enable mod_rewrite
RewriteEngine On
#Create mapping to lower case
RewriteMap lc int:tolower
#Match URLs with upper-case characters
RewriteCond %{REQUEST_URI} [A-Z]
#Stop rewrite loop when upper-case is in the allowed 6th level
RewriteCond %{REQUEST_URI} !^((/[^A-Z/]+){5})(/[^/]*[A-Z][^/]*)/?$
#Rewrite URL to lower case
RewriteRule ^((/[^/]+){1,5})(/[^/]+)/? ${lc:$1}$4 [L,R=301]