Macro Da

每天学一点,成长多一点!

如何实现PHPCMS V9 多站点[站群功能]子站独立域名且动态URL

1、新建站点,配置模型

  • 首先在PHPCMS v9后台中建立新站点。PHPCMS后台管理中心>>设置>>站点管理>>添加新站点
  • 设置好站点域名、站点目录、模板风格,如下图所示:

《如何实现PHPCMS V9 多站点[站群功能]子站独立域名且动态URL》

  • 新建完成的子站是没有模型的,可以导出主站的模型,导入到子站

2、配置PHPCMS V9路由功能

  • 找到根目录下 \caches\configs\route.php,默认代码如下:
<?php
/**
 * 路由配置文件
 * 默认配置为default如下:
 * 'default'=>array(
 * 	'm'=>'phpcms', 
 * 	'c'=>'index', 
 * 	'a'=>'init', 
 * 	'data'=>array(
 * 		'POST'=>array(
 * 			'catid'=>1
 * 		),
 * 		'GET'=>array(
 * 			'contentid'=>1
 * 		)
 * 	)
 * )
 * 基中“m”为模型,“c”为控制器,“a”为事件,“data”为其他附加参数。
 * data为一个二维数组,可设置POST和GET的默认参数。POST和GET分别对应PHP中的$_POST和$_GET两个超全局变量。在程序中您可以使用$_POST['catid']来得到data下面POST中的数组的值。
 * data中的所设置的参数等级比较低。如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。如:
 * 外部程序POST了一个变量catid=2那么你在程序中使用$_POST取到的值是2,而不是配置文件中所设置的1。
 */
return array(
	'default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init'),
);
  • 'default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init'),这一行下面添加一行
    'www.test.com'=>array('m'=>'content', 'c'=>'index', 'a'=>'init','data'=>array('GET'=>array('siteid'=>2))),
    其中www.test.com为子站域名,'siteid'=>2为子站的站点ID''
  • 修改结果如下:
<?php
/**
 * 路由配置文件
 * 默认配置为default如下:
 * 'default'=>array(
 * 	'm'=>'phpcms', 
 * 	'c'=>'index', 
 * 	'a'=>'init', 
 * 	'data'=>array(
 * 		'POST'=>array(
 * 			'catid'=>1
 * 		),
 * 		'GET'=>array(
 * 			'contentid'=>1
 * 		)
 * 	)
 * )
 * 基中“m”为模型,“c”为控制器,“a”为事件,“data”为其他附加参数。
 * data为一个二维数组,可设置POST和GET的默认参数。POST和GET分别对应PHP中的$_POST和$_GET两个超全局变量。在程序中您可以使用$_POST['catid']来得到data下面POST中的数组的值。
 * data中的所设置的参数等级比较低。如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。如:
 * 外部程序POST了一个变量catid=2那么你在程序中使用$_POST取到的值是2,而不是配置文件中所设置的1。
 */
return array(
	'default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init'),
	'www.test.com'=>array('m'=>'content', 'c'=>'index', 'a'=>'init','data'=>array('GET'=>array('siteid'=>2))),
);

3、修正URL

  • 根目录下\phpcms\modules\content\classes\url.class.php,搜索$url_arr[0] = $url_arr[1] = APP_PATH.$urls;找到这一行,替换为:
<?php //忽略此行,改为下面内容
$this->sitedb = pc_base::load_model('site_model');
$siteid=param::get_cookie('siteid');
$siteinfo=$this->sitedb->get_one(array('siteid'=>$siteid));
$url_arr[0] = $url_arr[1] = $siteinfo['domain'].$urls;
  • 根目录下\phpcms\modules\admin\category.php,搜索$url = APP_PATH.$url;找到这一行,替换为:
<?php //忽略此行,改为下面内容
$this->sitedb = pc_base::load_model('site_model');
$siteid=param::get_cookie('siteid');
$siteinfo=$this->sitedb->get_one(array('siteid'=>$siteid)); 
$url = $siteinfo['domain'].$url;

至此配置完成,就可以不用生成静态的方式来访问子站了,注意:实现此功能需要Apache环境支持!

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注