很多情况下我们可能需要将知识付费问答社区绑定到二级域名。而不是做为二级目录。这种情况下,可能需要对我们现有系统做一些配置改动,以配合知识付费问答社区的正常使用。
如果你的FastAdmin只有付费问答社区这一个应用,没有CMS或其它应用,你可以直接在后台插件管理修改配置,去除伪静态配置中的/ask
即可,后面的文章都不用看。
如果你的FastAdmin前台是多应用模块,比如有index模块应用(官网),ask模块(问答模块),api模块(API接口),cms模块(CMS模块),admin模块(后台模块),那此时我们需要修改的配置就比较多了,请耐心一步一步跟着下面的教程走,如果有遇到什么问题,请反馈。
首先我们准备我们的域名
www.yoursite.com 对应 index模块
ask.yoursite.com 对应 问答模块
admin.yoursite.com 对应 admin模块
api.yoursite.com 对应 api模块
注意yoursite.com
为你的根域名
首先我们需要在后台插件管理,知识付费问答社区配置修改二级域名前缀为ask
然后移除伪静态配置中的/ask
接着我们需要打开application/config.php
,
修改其中的url_domain_deploy
改为true
因为我们是多域名了,还需要设置session
和cookie
的域名,如下:
'session' => [
'id' => '', // SESSION_ID的提交变量,解决flash上传跨域 'var_session_id' => '', // SESSION 前缀 'prefix' => 'think', // 驱动方式 支持redis memcache memcached 'type' => '', // 是否自动开启 SESSION 'auto_start' => true, // SESSION存储目录,可选 //'path' => RUNTIME_PATH . 'session', // 共享域名 'domain' => 'yoursite.com'
],
'cookie' => [// cookie 名称前缀 'prefix' => '', // cookie 保存时间 'expire' => 0, // cookie 保存路径 'path' => '/', // cookie 有效域名 'domain' => 'yoursite.com', // cookie 启用安全传输 'secure' => false, // httponly设置 'httponly' => true, // 是否使用 setcookie 'setcookie' => true,
],
注意domain
为你的根域名
然后我们需要打开application/route.php
,全部修改为
return [
//别名配置,别名只能是映射到控制器且访问时必须加上请求的方法 '__alias__' => [ ], //变量规则 '__pattern__' => [ 'name' => '[\w\.\-\+]+', 'id' => '[0-9]+', 'date' => '[0-9]{8}', ], //域名绑定到模块 '__domain__' => [ //这里不需要添加问答、CMS绑定的域名前缀 'www' => 'index', 'api' => 'api', 'admin' => 'admin', ],
];
配置完成后注意清除runtime
的缓存和浏览器缓存,包含Cookie信息都需要清除。
其它应用
如果你还安装了其它应用,比如CMS,比如积分商城应用,应用对应的URL仍然无需要变更。比如
www.yoursite.com/cms/
www.yoursite.com/score/
等等。
跨域说明
如果你有其它页面接口调用api.yoursite.com
时可能出现跨域问题,我们可以修改/public/assets/js/fast.js
,修改其中的Fast.api.ajax
方法,修改为
ajax: function (options, success, error) {
options = typeof options === 'string' ? {url: options} : options; var index = Layer.load(); options = $.extend({ type: "POST", dataType: "json", xhrFields: { withCredentials: true }, success: function (ret) { Layer.close(index); ret = Fast.events.onAjaxResponse(ret); if (ret.code === 1) { Fast.events.onAjaxSuccess(ret, success); } else { Fast.events.onAjaxError(ret, error); } }, error: function (xhr) { Layer.close(index); var ret = {code: xhr.status, msg: xhr.statusText, data: null}; Fast.events.onAjaxError(ret, error); } }, options); $.ajax(options);
},
其中的
xhrFields: {
withCredentials: true
},
是我们新增加的代码,注意因为涉及修改了核心文件,需要使用php think min -m all -r js
重新压缩打包下JS代码
温馨提示
如果启用了域名部署url_domain_deploy
为true
,可能会导致在CMS或问答社区中的验证码无法正常显示,此时需要手动修改vendor/topthink/think-captcha/src/helper.php
中captcha_src
的路径,将
return thinkUrl::build('/captcha' . ($id ? "/{$id}" : ''));
修改为
return thinkUrl::build('/captcha' . ($id ? "/{$id}" : ''), '', true, 'www');
发表评论 取消回复