很多情况下我们可能需要将知识付费问答社区绑定到二级域名。而不是做为二级目录。这种情况下,可能需要对我们现有系统做一些配置改动,以配合知识付费问答社区的正常使用。
如果你的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');
发表评论 取消回复