Am struggling with a htaccess problem.
I need to convert all the URLs from uppercase to lowercase. But the query string alone should be the same.
For example,
www.tESTUrl.com/sOMePath/?q=SomeStringHere
should be converted as,
www.testurl.com/somepath/?q=SomeStringHere
Please help to fix this. Thanks in advance.
First You have to add this to your httpd.conf:
RewriteMap lc int:tolower
Then paste the below code into your .htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^[^A-Z]*[A-Z].*
RewriteRule ^ ${lc:%{REQUEST_URI}} [L,R=301]
This code redirct the url like from
www.tESTUrl.com/sOMePath/?q=SomeStringHere
to www.testurl.com/somepath/?q=SomeStringHere
First you need to add this line in your httpd.conf
to define a RewriteMap
for handling lower case conversion:
RewriteMap lc int:tolower
Then add this rule in your root .htaccess:
RewriteEngine On
RewriteRule ^(.*?[A-Z]+.*)$ /${lc:$1} [L,NE,R=302]
This will not affect QUERY_STRING
.
I believe tweaking the answer given here can handle the www.tESTUrl.com/
hostname part of the equation:
RewriteCond %{HTTP_HOST} !^(.+\.)?(.+)?$
RewriteRule ^(.*)$ ${lowercase:%{HTTP_HOST}}/$1 [R=301,L]
And then I believe this should work for the sOMePath/
path:
RewriteMap lc int:tolower
RewriteRule (.*?[A-Z]+.*)/?(.*)$ ${lc:$1}/?q=$2 [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]
The second line is not necessary but helpful if you want to lowercase the query string in the future. I just put this here to be complete.
You have to add this to your httpd.conf:
RewriteMap lc int:tolower
来源:https://stackoverflow.com/questions/24016728/convert-url-to-lower-case-using-htaccess-except-query-string