301重定向但将URL更改为apache中的所有小写

时间:2013-05-21 17:50:32

标签: apache .htaccess mod-rewrite

我想在Apache中设置301重定向以在重定向之前更改原始地址的大小写。例如,如果有人进入:

www.website1.com/UsErOfMiXedCase

它应该转发到

www.website2.com/userofmixedcase

这是重定向还是需要重写?我并不担心单个页面转发(例如www.website2.com/userofmixedcase/whatever.php) - 只是www.website1.com/whatever

提前谢谢你, 理查德

2 个答案:

答案 0 :(得分:1)

您需要使用Apache's internal tolower function定义重写地图。这只能在vhost或服务器配置中完成,如果您尝试将这些指令放在htaccess文件中,将导致错误:

RewriteEngine On
RewriteMap lowercase int:tolower

然后,在您的htaccess文件中,您可以使用类似之上的任何重写规则。重定向规则必须在您可能具有路由的规则之前:

# 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]

这会将http://www.website1.com/UsErOfMiXedCase之类的请求重定向到http://www.website2.com/userofmixedcase,从而将浏览器地址栏中的URL替换为全小写的URL。请注意,它不会影响具有多个路径节点的网址,例如http://www.website1.com/SoMe/PathName/UsErOfMiXedCase。如果您希望它影响所有请求,包括具有多个路径/子目录的请求,则需要更改此行:

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

为:

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

答案 1 :(得分:0)

您想要使用mod-rewrite。类似的东西:

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

这是一个非常一般的规则,所以在前导斜线之后的任何东西都是小写的。您可能只想对URL的特定部分执行小写操作,但我不能这样说。

你可能也应该关注这个Apache mod-rewrite documentation about the NC flag

HTH!