当前位置: 首页 > 后端技术 > PHP

Yii2基础版程序多模块二级域名部署方案及urlManager对二级域名绝对地址的转换方法

时间:2023-03-30 01:15:11 PHP

这似乎是个老生常谈的问题,那我们再说一遍。在这篇文章中,我们要完成两个事件。已完成的任务使模块二级域名让urlManager支持二级域名使模块二级域名我们有两个这样的模块,分别是admin和wechat,接下来我们要做一件事http://微信.abc。com===>wechathttp://admin.abc.com===>admin废话少说开始干货~?分析一个二级域名,我们以admin为例。首先,我们需要分析http://admin.abc.com,一个在各个云中的域名控制面板。配置config/web.php修改urlManager配置项'urlManager'=>['enablePrettyUrl'=>true,'showScriptName'=>false,'rules'=>['http://admin.abc.com'=>'admin',//方法一直接指定'http://<_m:(sys|admin|photo)>.abc.com'=>'<_m>'//方法二可以适配多个二级域名同时命名OK],],结束了吗?好了,完了,多模块二级域名的部署就够了。阿北知道你们肯定觉得这篇文章是头条党,为什么要写这么有深度的头条????其实二级域名的部署并不复杂。部署后的复杂性导致的一系列问题,可能与需求有关,也可能与技术有关。@@nai8@@接下来我举个需求的例子。二级域名管理问题我们推荐使用urlManager生成链接,而不是手动写http://xxx.xxx.xxx/xxx.html,这对以后适配url规则变化大有好处。但是二级域名之后,我就很难在admin模块下生成wechat模块的链接了。相对url肯定不行,但是如果我们使用yii提供的createAbsoluteUrl,它的domain部分也是使用当前域名。不能指定,所以不行,好像需要修改一下。原则:不要改动yii的源码。新建一个urlManager类,不改变urlManager的任何方法,我们需要对其进行扩展,所以第一步我们在appcomponents下创建一个名为urlManager的类,该类继承自yii的urlManager类,并添加一个名为domainName的类的属性。命名空间app\components;使用Yii;使用yii\helpers\Url;使用yii\base\InvalidConfigException;类UrlManager扩展yii\web\UrlManager{public$domainName;受保护的$_hostInfo;publicfunctiongetProperDomain(){if(!isset($this->domainName)||empty($this->domainName)){thrownewInvalidConfigException('请求需要配置域名!');}返回$this->domainName;}publicfunctiongetHostInfo(){if($this->_hostInfo===null){$secure=Yii::$app->getRequest()->getIsSecureConnection();$http=$安全?'https':'http';如果(isset($_SERVER['HTTP_HOST'])){$this->_hostInfo=$http.'://'。$this->getProperDomain();}elseif(isset($_SERVER['SERVER_NAME'])){$this->_hostInfo=$http.'://'。$this->getProperDomain();$端口=$安全?$这个->getSecurePort():$this->getPort();如果(($port!==80&&!$secure)||($port!==443&&$secure)){$this->_hostInfo.=':'.$端口;}}}返回$this->_hostInfo;}}思路其实很简单,就是我们重写getHostInfo函数,在配置config/web.php中添加指定的域名,我们的组件在web.php中自定义一个叫做adminUrlManager的项。...'urlManager'=>['enablePrettyUrl'=>true,'showScriptName'=>false,'rules'=>['http://<_m:(sys|admin|photo)>.zhihu-local.com'=>'<_m>',]],'adminUrlManager'=>['class'=>'app\components\UrlManager','domainName'=>'admin.abc.com',]...好了,现在我们执行下面的代码echoYii::$app->adminUrlManager->createAbsoluteUrl(['default/index']);在任何模块或应用程序下,它都会输出我们想要的绝对地址。http://admin.abc.com/index.ph...目的达到了。我再多说几句。今天是端午节放假的第二天。因为和家人去龙潭大峡谷玩,晚上酒店网络不好。我刚刚编辑并发送了它。我真的很抱歉。在此,我和嫂子也祝大家节日快乐,多陪陪家人,他们最重要。欢迎访问我的网站以获取更多yii2视频http://nai8.me