ThinkPHP支持模块(甚至可以包含控制器)的完整域名、子域名和IP部署功能,让你的模块变得更加灵活,模块绑定到域名或者IP后,URL地址中的模块名称就可以省略了,所以还可以起到简化URL的作用。 ## 开启域名部署 无论是子域名还是IP部署,首先要在应用配置文件中开启`APP_SUB_DOMAIN_DEPLOY`,这是前提,然后配置域名部署规则`APP_SUB_DOMAIN_RULES`。 ~~~ 'APP_SUB_DOMAIN_DEPLOY' => 1, // 开启子域名或者IP配置 'APP_SUB_DOMAIN_RULES' => array( /* 域名部署配置 *格式1: '子域名或泛域名或IP'=> '模块名[/控制器名]'; *格式2: '子域名或泛域名或IP'=> array('模块名[/控制器名]','var1=a&var2=b&var3=*'); */ ) ~~~ 域名部署的定义格式2和1的区别在于格式2可以隐式传入额外的参数。 域名和IP的解析涉及到DNS解析以及Apache等服务器的配置,这块不再详细描述,请参考相关百度资料。 > 域名或者IP部署到模块并不需要设置模块访问列表。 ## 完整域名部署 可以在域名规则中直接定义完整的域名,例如: ~~~ 'APP_SUB_DOMAIN_DEPLOY' => 1, // 开启子域名配置 'APP_SUB_DOMAIN_RULES' => array( 'admin.domain1.com' => 'Admin', // admin.domain1.com域名指向Admin模块 'test.domain2.com' => 'Test', // test.domain2.com域名指向Test模块 ), ~~~ 在域名部署之前的访问地址: `http://www.domain.com/Admin/Index/index` 和 `http://www.domain.com/Test/Index/index` 域名部署后的访问地址变成: `http://admin.domain1.com/Index/index` 和 `http://test.domain2.com/Index/index` ## 子域名部署 子域名部署包括任意级子域名的支持,在你的应用配置文件中增加如下配置参数: ~~~ 'APP_SUB_DOMAIN_DEPLOY' => 1, // 开启子域名配置 'APP_SUB_DOMAIN_RULES' => array( 'admin' => 'Admin', // admin子域名指向Admin模块 'test' => 'Test', // test子域名指向Test模块 ), ~~~ 部署之前的访问地址:`http://www.domain.com/Admin/Index/index` 部署后的访问地址变成: `http://admin.domain.com/Index/index` 如果你的部署域名后缀是二级后缀,例如 `com.cn` 、`net.cn` 或者 `org.cn` 之类的话,为了让系统更好的识别你的子域名,需要配置`APP_DOMAIN_SUFFIX`如下: ~~~ 'APP_DOMAIN_SUFFIX'=>'com.cn' ~~~ > APP_DOMAIN_SUFFIX参数不支持设置多个后缀,如果你是一级域名后缀的话则该参数可以无需任何设置。 ##### 传入参数 子域名部署的时候,可以传入隐式的参数,例如: ~~~ 'APP_SUB_DOMAIN_DEPLOY' => 1, // 开启子域名配置 'APP_SUB_DOMAIN_RULES' => array( 'admin' => array('Admin','var1=1&var2=2'), // admin子域名指向Admin模块 ), ~~~ 访问 `http://admin.domain.com/Index/index` 的同时会传入 `$_GET['var1'] = 1` 和 `$_GET['var2'] = 2` 两个参数。 ##### 控制器绑定 子域名部署还可以支持绑定某个控制器,例如: ~~~ 'APP_SUB_DOMAIN_DEPLOY' => 1, // 开启子域名配置 'APP_SUB_DOMAIN_RULES' => array( 'test.admin' => 'Admin/Test', // test.admin子域名指向Admin模块的Test控制器 ), ~~~ 部署之前的访问地址: `http://www.domain.com/Admin/Test/index` 部署后的访问地址: `http://test.admin.domain.com/index` ## 泛域名部署 如果要部署某个模块到泛域名支持,可以使用: ~~~ 'APP_SUB_DOMAIN_DEPLOY' => 1, // 开启子域名配置 'APP_SUB_DOMAIN_RULES' => array( 'admin' => 'Admin', // admin域名指向Admin模块 '*' => array('Test','var1=1&var2=*'), // 二级泛域名指向Test模块 '*.user' => array('User','status=1&name=*'), // 三级泛域名指向User模块 ), ~~~ 配置后,我们可以访问: ~~~ http://hello.domain.com/Index/index ~~~ 访问Test模块 并隐式传入`$_GET['var1'] = 1` 和 `$_GET['var2'] = 'hello'` 两个参数。 访问如下地址: ~~~ http://think.user.domain.com/Index/index ~~~ 访问User模块,并隐式传入 `$_GET['status'] = 1` 和 `$_GET['name'] = 'think'` 两个参数。 在配置传入参数的时候,如果需要使用当前的泛域名作为参数,可以直接设置为`“*”`即可。 > 目前只支持二级域名和三级域名的泛域名部署。 ## IP访问部署 可以为某些模块配置IP访问规则,例如: ~~~ 'APP_SUB_DOMAIN_DEPLOY' => 1, // 开启子域名配置 'APP_SUB_DOMAIN_RULES' => array( '22.56.78.9' => 'Admin', // 22.56.78.9指向Admin模块 ), ~~~