我想在Apache中设置301重定向以在重定向之前更改原始地址的大小写。例如,如果有人进入:
www.website1.com/UsErOfMiXedCase
它应该转发到
www.website2.com/userofmixedcase
这是重定向还是需要重写?我并不担心单个页面转发(例如www.website2.com/userofmixedcase/whatever.php
) - 只是www.website1.com/whatever
。
提前谢谢你, 理查德
答案 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!