简体   繁体   中英

301 redirect but change URL to all lower case in apache

I'd like to set up a 301 redirect in Apache to change the case of the original address before redirecting. So for example if someone enters:

www.website1.com/UsErOfMiXedCase

it should forward to

www.website2.com/userofmixedcase

Would this be a redirect or would it need to be a rewrite? I'm not fussed about individual page forwarding (eg www.website2.com/userofmixedcase/whatever.php ) - just www.website1.com/whatever .

Thank you in advance, Richard

You need to define the rewrite map using Apache's internal tolower function . This can only be done in vhost or server config, and will result in an error if you try to put these directives in an htaccess file:

RewriteEngine On
RewriteMap lowercase int:tolower

Then, in your htaccess file, you can use something like this above any rewrite rules you already have . The redirect rules must be before whatever rules you may have that does routing:

# check that the lower case version of the URI is different than the unchanged URI
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteCond ${lowercase:%1}::%1 !^(.*)::\1$
RewriteRule ^/?(.+)$ http://www.website2.com/${lowercase:$1} [L,R=301]

This will redirect a request like http://www.website1.com/UsErOfMiXedCase to http://www.website2.com/userofmixedcase , thus replacing the URL in the browser's address bar with the one that's all lowercase. Note that it won't affect URLs with multiple path nodes, eg http://www.website1.com/SoMe/PathName/UsErOfMiXedCase . If you want it to affect all requests including ones that have multiple paths/subdirectories, then you need to change this line:

RewriteCond %{REQUEST_URI} ^/([^/]+)$

to:

RewriteCond %{REQUEST_URI} ^/(.+)$

You are wanting to use mod-rewrite for this. Something like:

RewriteRule ^/(.*) http://website2.com/$1 [NC]

That is a very general rule, so anything after the leading slash will be lower case. You may want to only do the lower case for specific portions of URL, but I cannot speak to that.

You probably should eyeball the Apache mod-rewrite documentation about the NC flag about this as well.

hth!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM