Преобразование 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