диспетчер регулярного выражения соответствует регистру, затем измените части URL-адреса на нижний регистр - PullRequest
0 голосов
/ 07 мая 2020

Скажем, у меня есть страница продукта /GB/en/cat/product/abc/cde/*** - это хорошая валидная страница 200,
Но люди могут случайно набрать /GB/en/cat/Product/abc/cde/*** или /GB/en/cat/PRODUCT/abc/cde/*** (поскольку моя страница содержимого чувствительна к регистру), эти два URL-адреса вызывают проблемы для моих seo цель Итак, мне нужно иметь правило перезаписи в диспетчере, чтобы обрабатывать что-либо вроде /GB/en/cat/Product/abc/cde/*** или /GB/en/cat/PRODUCT/abc/cde/***, переносить их на /GB/en/cat/product/abc/cde/***

Ниже представлена ​​моя текущая попытка, но она работает только тогда, когда пользователь вводит /gb/en/cat/Product/... или /gb/en/cat/PRODUCT/..., тогда он может успешно измениться на /GB/en/cat/PRODUCT/abc/cde/***

RewriteCond %{ENV:PAGE_REQUEST} ^true$
  RewriteCond %{REQUEST_URI} !^/[A-Z]{2}/[a-z]{2}
  RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]

Если пользователь вводит /GB/en/cat/PRODUCT/..., правило перезаписи не сработает ... Любые предложения кода будут действительно приняты. Спасибо

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Как сказал Влад: ваше второе условие будет ограничивать правило, только если оба условия соблюдены, правило будет применяться. Второе условие требует применения правила только в том случае, если 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]
1 голос
/ 07 мая 2020

Ваше второе условие перезаписи ограничивает правило:

RewriteCond %{REQUEST_URI} !^/[A-Z]{2}/[a-z]{2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...