1

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

www.website1.com/UsErOfMiXedCase

它应该转发到

www.website2.com/userofmixedcase

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

提前谢谢你,理查德

4

2 回答 2

1

您需要使用Apache 的内部tolower函数定义重写映射。这只能在 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/UsErOfMiXedCasehttp://www.website2.com/userofmixedcase,从而将浏览器地址栏中的 URL 替换为全小写的 URL。请注意,它不会影响具有多个路径节点的 URL,例如http://www.website1.com/SoMe/PathName/UsErOfMiXedCase. 如果您希望它影响所有请求,包括具有多个路径/子目录的请求,那么您需要更改此行:

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

至:

RewriteCond %{REQUEST_URI} ^/(.+)$
于 2013-05-21T22:26:06.933 回答
0

你想用mod-rewrite 这个。就像是:

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

这是一个非常普遍的规则,所以前导斜杠之后的任何内容都将是小写的。您可能只想对 URL 的特定部分使用小写字母,但我不能这么说。

您可能也应该关注有关 NC 标志的 Apache mod-rewrite 文档

嗯!

于 2013-05-21T20:02:03.690 回答