由于众所周知的原因,域名规范化是每一个站点不得不考虑的问题。小到是不是带www,大到类似mirrors和mirror这样的拼写错误,或者pub、public这样的全拼和缩写,都是需要的。

对于本站也面对这样的问题。以前一直都是通过下面的规则来做的:


RewrriteCond ${HTTP_HOST} !^www.gooth.org$ [nocase]

RewrriteCond ${HTTP_HOST} !^$ [nocase]

RewriteRules ^(.*)/(.*) http://www.gooth.org/$1 [L,R=301]

但是发现每次把非规范域名(例如 http://abc.gooth.org/docs/ )都重定向到了主域名根 http://www.gooth.org/ 上,甚是苦恼。后来抱着试一试的态度,修改了一下规则为:


RewrriteCond ${HTTP_HOST} !^www.gooth.org$ [nocase]

RewrriteCond ${HTTP_HOST} !^$ [nocase]

RewriteRules ^/(.*) http://www.gooth.org/$1 [L,R=301]

结果问题解决!由此总结出,RewriteRules 的匹配,是针对 QueryString 的,也就是说域名(端口)后的部分,而不是整个URI。在此记录,供诸君参考!