Я борюсь с проблемой 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