如何在一个站点中部署多域名、多应用-register方法

框架提供全局方法register来实现本功能,本方法必须在startup方法之前调用。

register的几种重载

所有重载中,appname微应用名称(必选),apppath为应用路径(必选)。

register(host, appname, apppath[, callback])

host为主机名,支持*通配符。

register("dns.mae.im", "dns", "dns/app");
register("*.mae.im", "dns2", "dns2/app");
register("*", "dns3", "dns3/app");

register(regexp, appname, apppath[, callback])

regexp为正则表达式,用于匹配请求的域名。

register(/^(.+?)\.mae\.im$/i, "dns", "dns/app");

register(host_array, appname, apppath[, callback])

hostname_array为host或regexp数组。

register(["dns.mae.im", "dns.thinkasp.cn", /^(.+?)\.mae\.im$/i], "dns", "dns/app");

只要任意一个hostname注册成功,即停止后面的hostname注册。

register的回调函数callback

host注册成功后,框架会调用callback方法,并传递三个参数:

  • 注册成功的hostname
  • 注册成功的应用名称appname
  • 注册成功的应用路径apppath
//实现的功能:同一个应用可绑定多域名,但最后全部跳转到同一个域名。
register(['who.thinkasp.cn', 'iwhois.cc'], 'who', 'who/app', function(hostname){
    if(hostname != 'iwhois.cc') Response.Redirect("http://iwhois.cc/");
});

register的属性

host注册成功后,register会被设置两个属性:

  • registered,值为true,用于判断是否注册成功。
  • domain,注册成功的域名。
//实现的功能:没有注册成功时,显示一个404页面
//当然,如下代码必然注册成功,因为第三条的hostname为*,匹配任何host
register("dns.mae.im", "dns", "dns/app");
register("*.mae.im", "dns2", "dns2/app");
register("*", "dns3", "dns3/app");
if(register.registered !== true){
    Response.Status = "404 Not Dound";
    Response.Write("

404 Not Found

Page can not be found.

"); Response.End(); }

注意事项

部署多域名多应用时,建议开启MO_SESSION_WITH_SINGLE_TAG选项,防止多应用之间的session混淆。

发表评论评论(2)