Chinaunix首页 | 论坛 | 博客
  • 博客访问: 376431
  • 博文数量: 166
  • 博客积分: 1972
  • 博客等级: 上尉
  • 技术积分: 1845
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-19 21:16
文章分类

全部博文(166)

文章存档

2013年(7)

2010年(159)

分类:

2010-11-08 18:07:32

裸域名也就是在域名注册商处申请得到的顶级域名,比如本站的域名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

阅读(943) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~