Digamos que tengo una página de producto /GB/en/cat/product/abc/cde/*** es una buena página 200 validada,
Pero las personas podrían escribir accidentalmente /GB/en/cat/Product/abc/cde/*** o /GB/en/cat/PRODUCT/abc/cde/*** (ya que mi página de contenido distingue entre mayúsculas y minúsculas) estas dos URL causando problemas para mi propósito de SEO Así que necesito tener una regla de reescritura en el despachador para manejar algo como /GB/en/cat/Product/abc/cde/*** o /GB/en/cat/PRODUCT/abc/cde/*** , transferirlos a /GB/en/cat/product/abc/cde/***
A continuación se muestra mi prueba actual, pero solo funciona cuando el usuario escribe /gb/en/cat/Product/... o /gb/en/cat/PRODUCT/... luego puede cambiar con éxito a /GB/en/cat/PRODUCT/abc/cde/***
RewriteCond %{ENV:PAGE_REQUEST} ^true$ RewriteCond %{REQUEST_URI} !^/[AZ]{2}/[az]{2} RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L] Si el usuario escribe /GB/en/cat/PRODUCT/... la regla de reescritura no funcionará... Cualquier sugerencia de código sería realmente apreciada. Gracias
Su segunda condición de reescritura limita la regla:
RewriteCond %{REQUEST_URI} !^/[AZ]{2}/[az]{2}Como dijo Vlad: su segunda condición limitará la regla, solo si se cumplen ambas condiciones, se aplicará la regla. Su segunda condición dice que solo aplique la regla si el URI no comienza con dos caracteres en mayúscula, seguidos de dos caracteres en minúscula. Entonces /GB/en/cat/PRODUCT/... no coincidirá ya que no se cumple la segunda condición. Esto significa que la regla no se aplica y el PRODUCT en mayúsculas no se fija. Simplemente puede eliminar esta segunda condición ya que su regla no cambiará los caracteres en mayúsculas correctos.
Como ya dijo rakhi4110, su tercer grupo en su regla de reescritura: (.*) incluirá / después de las dos letras del idioma, por lo que si termina la regla con /${tolower:$3} , terminará con dos barras en el URI, para solucionarlo, puede eliminar la barra al final o agregar una entre los grupos 2 y 3:
RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})/(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]o
RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})(.*) "/${toupper:$1}/${tolower:$2}${tolower:$3}" [R=301,L](En mi opinión, el primero es un código más limpio)
Entonces, para concluir, lo siguiente debería funcionar:
RewriteCond %{ENV:PAGE_REQUEST} ^true$ RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})/(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]