一.使用场景说明
在电子商务平台中,卖家在平台上可以开自己的店铺,然后买家就可以直接进入到卖家的店铺进行购物.那么问题来了,买家通过什么样的入口进入卖家的店铺?
不加任何处理的方式就是:
1. 在平台上添加卖家店铺入口的链接
2. 直接给用户一个访问卖家店铺首页的URL
对于第一种方式,是合理的,也是必须要这样做.而第二种很明显就不合理,我想大家作为一个web开发者都知道,上面所说的那个访问卖家首页的url一定是带着很多参数,很长很不优雅,很难记忆的一个url.所以,我们是要给用户一个url,但是这个url必须得是精短的,易记的,优雅的一个URL.所以我们可以为每个店铺配置一个二级域名,用户通过这个二级域名在浏览器输入,就可以直接访问卖家店铺的首页了.
然后,接下来的第二个问题就来了,我们如何给卖家配置二级域名?为每一个卖家的店铺都在DNS服务器上配置一个二级域名显然是不现实.所以我们要通过程序来实现二级域名的访问.
二.实现原理:
- 给DNS配置泛域名解析,也就是在DNS服务器上配置一条: “*.一级域名” 的主机记录,假如您申请的以及域名是
legengshop.com
,那在DNS服务器上配置的泛域名解析的主机记录就是*.legendshop.com
配置泛域名解析的意义就在于让所有的*.legendshop.com
访问都映射到同一个IP
关于配置DNS的泛域名解析请参考 DNS泛域名解析
编写一个过滤器来拦截所有的请求,然后对拦截的请求进行解析,转换成访问卖家店铺首页的url,然后在过滤器进行转发.
- 如可口可乐在您的电商平台上开了一个店铺,并且可口可乐希望用户可以通过
coco.legendshop.com
访问到他们的店铺首页.但是实际访问可口可乐店铺首页的url却是:www.legendshop.com/shop?shopId=1
,这时候我们编写的这个过滤器就需要把用户在浏览器输入的coco.legendshop.com
变为www.legendshop.com/shop?shopId=1
,然后进行转发就可以进入到可口可乐店铺首页了. - 至于
www.legendshop.com/shop?shopId=1
这条url的含义,以及如何把coco.legendshop.com
变为www.legendshop.com/shop?shopId=1
请看下面的详细步奏说明吧!
- 如可口可乐在您的电商平台上开了一个店铺,并且可口可乐希望用户可以通过
三. 具体实现
- 数据设计
一般来说,店铺信息应该在数据库有一张店铺表来保存店铺信息的,上面举例的链接 www.legendshop.com/shop?shopId=1
中的shopId=1
,其实就是把店铺id通过url参数传到后台,然后后台程序通过这个店铺ID找到数据库对应的店铺数据,再填充到页面,最后将页面响应给用户,那么用户访问的就是店铺首页.数据库的店铺表如下:
shop_id | shop_name | sec_domain_name | shop_info |
---|---|---|---|
1 | 可口可乐 | c |