Преобразование url в нижний регистр с помощью htaccess кроме строки запроса
Я борюсь с проблемой htaccess.
мне нужно преобразовать все URL-адреса из верхнего регистра в нижний регистр. Но только строка запроса должна быть одинаковой.
например,
www.tESTUrl.com/sOMePath/?q=SomeStringHere
должно быть преобразовано как,
www.testurl.com/somepath/?q=SomeStringHere
пожалуйста, помогите исправить. Спасибо заранее.
4 ответов
сначала вы должны добавить это в свой httpd.conf:
RewriteMap lc int:tolower
вставьте приведенный ниже код в код .htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^[^A-Z]*[A-Z].*
RewriteRule ^ ${lc:%{REQUEST_URI}} [L,R=301]
этот код redirct url, как из
www.tESTUrl.com/sOMePath/?q=SomeStringHere
to www.testurl.com/somepath/?q=SomeStringHere
сначала вам нужно добавить эту строку в свой httpd.conf
определение RewriteMap
для обработки преобразования нижнего регистра:
RewriteMap lc int:tolower
затем добавьте это правило в свой корень .реврайт:
RewriteEngine On
RewriteRule ^(.*?[A-Z]+.*)$ /${lc:} [L,NE,R=302]
Это не повлияет QUERY_STRING
.
Я считаю, что ковыряние ответ тут может обрабатывать www.tESTUrl.com/
хоста часть уравнения:
RewriteCond %{HTTP_HOST} !^(.+\.)?(.+)?$
RewriteRule ^(.*)$ ${lowercase:%{HTTP_HOST}}/ [R=301,L]
и потом я считаю, что это должно работать для sOMePath/
путь:
RewriteMap lc int:tolower
RewriteRule (.*?[A-Z]+.*)/?(.*)$ ${lc:}/?q= [R]
RewriteCond %{REQUEST_URI} ^[^A-Z]*[A-Z].* [OR]
RewriteCond %{QUERY_STRING} ^[^A-Z]*[A-Z].*
RewriteRule ^ ${lc:%{REQUEST_URI}}?${QUERY_STRING} [L,R=301]
вторая строка не нужна, но полезна, если вы хотите записать строку запроса в нижнем регистре в будущем. Я просто положу это здесь, чтобы быть полным.
вы должны добавить это в свой httpd.conf:
RewriteMap lc int:tolower