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

Вопрос:

Борьба с проблемой 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} ^[^A-Z]*[A-Z].* RewriteRule ^ ${lc:%{REQUEST_URI}} [L,R=301]

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

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

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

Ответ №1

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

RewriteMap lc int:tolower

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

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

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

Ответ №2

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

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

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

RewriteMap lc int:tolower RewriteRule (.*?[A-Z]+.*)/?(.*)$ ${lc:$1}/?q=$2 [R] Ответ №3RewriteCond %{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

Оцените статью
Добавить комментарий