Вопрос:
Борьба с проблемой 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