裸域名也就是在域名注册商处申请得到的顶级域名,比如本站的域名meiweier.com。www、blog这些前缀都是子域名,也叫二级域名。普通用户访问网站的通常习惯是在浏览器的地址栏输入www.***.***,其实访问的是一个二级域名。对于域名解析来说,顶级域名也是可以被直接访问的,设定好解析后在web
server上配置即可。但通常我们并不这样做,特别是在中国,大部分普通用户认为访问网站是必须要输入www的。没办法,用户的习惯就是这样,我门必须迎合之。
那当用户访问裸域名的时候怎么办呢?如果允许用户直接访问裸域名,可能会带来一个潜在问题,这个问题针对的是有用户系统的网站。通常,网站的用户系统依赖的是浏览器的cookies,而cookies是区分域的,顶级域名和二级域名会被认为是两个不同的域。
拿本站举例来说,用户使用裸域名meiweier.com访问,并使用帐号登录,当他再次使用二级域名访问的时候,他并没有在登录状态,并且可以在登录一次。这对普通用户来说可能会造成迷惑,不好。另外,一个网站同时使用裸域名和二级域名也不利于SEO。所以我希望用户访问裸域名的时候自动跳转到二级域名www,就像豆瓣网,访问douban.com自动跳到一样。
我使用HttpFox跟踪了一下douban的跳转过程,在浏览器中访问douban.com,HTTP请求过程截图如下:
可以看出,它是通过执行服务器端跳转(HTTP
302)来实现的。据此,首先想到的方法是,通过程序控制,检查用户访问的地址,如果是裸域名,则自动执行跳转。很明显,这个方法并不优雅,还会增加应用程序的负担。由于meiweier.com使用的nginx,于是想到nginx有没有提供类似的功能。通过google,在一篇
国外的blog上找到了方法,只是我要做的和他正好相反,但原理是一样的。在配置文件的server节增加如下脚本:
if
($host != '' )
{
rewrite ^/(.*)$ http:///$1 permanent;
}
重启nginx即可,够简单吧!
意外的收获,访问我的另外一个域名也被自动跳转到了。不过这个结果,从上面脚本就可以中看出来了。
nginx真是强大!
本文出自 “江湖” 博客,请务必保留此出处http://firefish.blog.51cto.com/298258/269622