使用nginx进行裸域名的跳转

使用nginx进行裸域名的跳转

裸域名也就是在域名注册商处申请得到的顶级域名,比如本站的域名meiweier.com。www、blog这些前缀都是子域名,也叫二级域名。普 通用户访问网站的通常习惯是在浏览器的地址栏输入www.***.***,其实访问的是一个二级域名。对于域名解析来说,顶级域名也是可以被直接访问的, 设定好解析后在web server上配置即可。但通常我们并不这样做,特别是在中国,大部分普通用户认为访问网站是必须要输入www的。没办法,用户的习惯就是这样,我门必须迎合之。

那当用户访问裸域名的时候怎么办呢?如果允许用户直接访问裸域名,可能会带来一个潜在问题,这个问题针对的是有用户系统的网站。通常,网站的用户系统依赖的是浏览器的cookies,而cookies是区分域的,顶级域名和二级域名会被认为是两个不同的域。

拿本站举例来说,用户使用裸域名meiweier.com访问,并使用帐号登录,当他再次使用二级域名 www.meiweier.com 访问的时候,他并没有在登录状态,并且可以在 登录一次。这对普通用户来说可能会造成迷惑,不好。另外,一个网站同时使用裸域名和二级域名也不利于SEO。所以我希望用户访问裸域名的时候自动跳转到二 级域名www,就像豆瓣网,访问douban.com自动跳到 www.douban.com 一 样。

我使用HttpFox跟踪了一下douban的跳转过程,在浏览器中访问douban.com,HTTP请求过程截图如下:


可以看出,它是通过执行服务器端跳转(HTTP 302)来实现的。据此,首先想到的方法是,通过程序控制,检查用户访问的地址,如果是裸域名,则自动执行跳转。很明显,这个方法并不优雅,还会增加应用 程序的负担。由于meiweier.com使用的nginx,于是想到nginx有没有提供类似的功能。通过google,在一篇 国外的blog 上找到了方法,只是我要做的和他正好相反,但原理是一样的。在配置文件的server节增加如 下脚本:

 

if ($host != 'www.meiweier.com' ) {
        rewrite    ^/(.*)$    http://www.meiweier.com/$1    permanent;
}

 

重启nginx即可,够简单吧!

意外的收获,访问我的另外一个域名 www.meiweier.net 也 被自动跳转到 www.meiweier.com 了。不过这个结果,从上面 脚本就可以中看出来了。

nginx真是强大!

http://firefish.blog.51cto.com/298258/269622
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值