频道二级域名的配置方法
现在是移动端的天下,域名的意义其实并不大了,并且启用频道二级域名还容易存在JS跨域的问题,同时微信公众号与小程序也会有域名的限制,所以一直以来就没有考虑在系统中集成频道二级域名。
大家有需要的话,可以参考下面的方法自行配置。
修改文件\application\config.php 查找url_domain_deploy把他右边的 false换成 true
再查找 url_domain_root 在他右边输入 abc.com 即你的域名(注意单引号不能漏掉)这一项其实不设置也问题不大,但有的服务器不设置就不会生效,所以尽量设置一下吧。
如下图所示

再查找 extra_file_list把右边中括号里边的内容THINK_PATH . 'helper' . EXT换成 APP_PATH . 'helper' . EXT,THINK_PATH . 'helper' . EXT
如下图所示

接着在\application\目录下创建一个helper.php文件 即\application\helper.php里边的内容放下如下代码
<?phpuse think\Url;
if (!function_exists('url')) { /** * Url生成 * @param string $url 路由地址 * @param string|array $vars 变量 * @param bool|string $suffix 生成的URL后缀 * @param bool|string $domain 域名 * @return string */ function url($url = '', $vars = '', $suffix = true, $domain = false) { static $array = null; if ($array===null) { $array = @include(RUNTIME_PATH.'url_cfg.php'); if (empty($array)) { $array = []; } } if ($vars && is_string($vars)) { parse_str($vars,$vars); } $par = ''; $_vars = $vars; //避免改变顺序 if ($vars) { ksort($vars); $par = http_build_query($vars); }
if ($domain===false) { $url = full_url($url); list($m_name,$m_file,$m_action) = explode('/', $url); $md = modules_config($m_name); if(IN_WAP===true){ if ($md['wap_domain']) { $domain = $md['wap_domain']; } }else{ if ($md['pc_domain']) { $domain = $md['pc_domain']; } }
if ($domain===false) { if(IN_WAP===true && config('webdb.wap_domain')){ $domain = config('webdb.wap_domain'); }elseif(config('webdb.pc_domain')){ $domain = config('webdb.pc_domain'); } } }
if ($par && $array[$url][$par]) { $_url = Url::build($url.'?'.$par, [], $suffix, $domain); }else{ $_url = Url::build($url, $_vars, $suffix, $domain); }
if ( ($m_name=='index'&&!in_array($m_file, ['alonepage','index','login','reg','plugin']))|| ($m_name=='member'&&!in_array($m_file, ['index'])) ) { //避免ajax或框架的跨域 $_url = preg_replace("/^(http|https):\/\/([^\/]+)\//i", "/",$_url); }elseif($url=='index/index/index'){ $_url = str_replace('index/index/index.html','',$_url); } return $_url;
}}然后再修改 \application\route.php 查找里边类似的代码
Route::group(['name'=>'bbs','ext'=>'html','__domain__'=>'thinkphp'], [ 'show-<id>' =>['bbs/content/show',['method'=>'get'],['id' => '\d+']], 'list-<fid>'=>['bbs/content/index',['method'=>'get'],['fid' => '\d+']], 'mid-<mid>'=>['bbs/content/index',['method'=>'get'],['mid' => '\d+']], 'show' => 'bbs/content/show', 'list' => 'bbs/content/index', 'index$' => 'bbs/index/index',]);把他删除,换成下面的代码
Route::domain('bbs',[ 'show-<id>' =>['bbs/content/show',['method'=>'get'],['id' => '\d+']], 'list-<fid>'=>['bbs/content/index',['method'=>'get'],['fid' => '\d+']], 'mid-<mid>'=>['bbs/content/index',['method'=>'get'],['mid' => '\d+']], 'show' => 'bbs/content/show', 'list' => 'bbs/content/index', 'index$' => 'bbs/index/index', '/$' => 'bbs/index/index',]);第一行的bbs即代表二级域名是bbs,比如bbs.xxx.com 这个bbs是可以换成其它的,比如lutan 下面7行的bbs即代表是论坛模块目录名
上面只是针对论坛的二级域名设置,其它频道比如cms qun也同样的方法这样处理,先要删除原有的路由规则,再添加,不然的话,会有冲突不会生效。
如下图所示

再修改文件\application\admin\controller\Module.php 查找
['icon','icon', '图标', ''],在他下面一行添加如下代码
['text','pc_domain', '二级域名', '没配置好服务器的话,必须留空,否则请输入二级域名比如“bbs”而不是http://bbs.xxx.com也不是bbs.xxx.com'],
保存即可,如下图所示

最后就要升级一下数据库,在后台数据库管理那里导入下面的内容
ALTER TABLE `qb_module` ADD `pc_domain` VARCHAR( 100 ) NOT NULL COMMENT '二级域名,比如“wap”而不是http://wap.xxx.com也不是wap.xxx.com';INSERT INTO `qb_config` (`id`, `type`, `title`, `c_key`, `c_value`, `form_type`, `options`, `ifsys`, `htmlcode`, `c_descrip`, `list`, `sys_id`) VALUES(0, 1, 'PC访问专用域名', 'pc_domain', '', 'text', '', 1, '', '没配置好服务器的话,必须留空,否则请输入域名比如“www”而不是http://www.xxx.com也不是www.xxx.com', 0, 0);确认先把要使用的二级域名指向到当前网站的根目录后。再进后台设置一下www域名网址,及相应的频道二级域名即可,如下图所示


这样就可以使用频道二级目录了!
必须要注意一下

最后的效果如下图所示
