Преобразование url в нижний регистр с использованием htaccess, кроме строки запроса

Я борюсь с проблемой htaccess.

Мне нужно преобразовать все URL-адреса из верхнего регистра в нижний. Но сама строка запроса должна быть одинаковой.

Например,

www.tESTUrl.com/sOMePath/?q=SomeStringHere 

должны быть преобразованы как,

 www.testurl.com/somepath/?q=SomeStringHere 

Пожалуйста, помогите исправить это. Заранее спасибо.

Сначала вы должны добавить это в свой httpd.conf:

 RewriteMap lc int:tolower 

Затем вставьте код ниже в ваш .htaccess

 RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^[^AZ]*[AZ].* RewriteRule ^ ${lc:%{REQUEST_URI}} [L,R=301] 

Этот код изменяет URL-адрес, например, из

www.tESTUrl.com/sOMePath/?q=SomeStringHere

на www.testurl.com/somepath/?q=SomeStringHere

Сначала вам нужно добавить эту строку в свой httpd.conf чтобы определить RewriteMap для обработки преобразования в нижнем регистре:

 RewriteMap lc int:tolower 

Затем добавьте это правило в свой root .htaccess:

 RewriteEngine On RewriteRule ^(.*?[AZ]+.*)$ /${lc:$1} [L,NE,R=302] 

Это не повлияет на QUERY_STRING .

Я считаю, что настройка ответа, приведенного здесь, может обрабатывать часть сайта: www.tESTUrl.com/ hostname:

 RewriteCond %{HTTP_HOST} !^(.+\.)?(.+)?$ RewriteRule ^(.*)$ ${lowercase:%{HTTP_HOST}}/$1 [R=301,L] 

И тогда я считаю, что это должно работать для sOMePath/ path:

 RewriteMap lc int:tolower RewriteRule (.*?[AZ]+.*)/?(.*)$ ${lc:$1}/?q=$2 [R] 
 RewriteCond %{REQUEST_URI} ^[^AZ]*[AZ].* [OR] RewriteCond %{QUERY_STRING} ^[^AZ]*[AZ].* RewriteRule ^ ${lc:%{REQUEST_URI}}?${QUERY_STRING} [L,R=301] 

Вторая строка не нужна, но полезна, если вы хотите в дальнейшем строчить строку запроса. Я просто поставил это здесь, чтобы быть полным.

Вы должны добавить это в свой httpd.conf:

 RewriteMap lc int:tolower