内容简介:Yii2基础版程序多模块二级域名部署方案以及urlManager对二级域名绝对地址的改造方法
这似乎是个老生常谈的问题,那就再谈一次吧,本文我们要完成两件事件。
完成的任务
-
将模块二级域名化
-
让urlManager支持二级域名
将模块二级域名化
我们有这样的两个模块,分别是 admin 和 wechat ,接下来想做一件事情
http://wechat.abc.com ===> wechat http://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>' //方法二 多个二级域名同时适配也可以 ], ],
完了么?
恩,完了,多模块的二级域名部署就可以了,阿北知道你一定认为此文为标题党,干嘛写这么有深度的标题那????
其实二级域名的部署并不复杂,复杂在部署后所引发的一些列问题,这种问题可能是需求上的,可能是技术上的。
@@nai8@@
接下来就举一个需求上的例子。
二级域名管理问题
我们推荐使用urlManager来生成链接,而不是人为写 http://xxx.xxx.xxx/xxx.html 这样,这样对以后适配url规则的更改有莫大的好处。
但是当二级域名后,我在 admin 模块下想 生成一个 wechat 模块的链接就变的困难了,相对url肯定是不行了,但是如果我们用yii提供的 createAbsoluteUrl ,它的domain部分也是使用当前域名,无法指定,因此也行不通,看来要改造一下。
原则:不改动yii源代码。
新建一个 urlManager 类
在不改变urlManager任何方法的前提下,我们需要扩展一下它,所以第一步我们在 appcomponents 下建立一个叫做 urlManager 的类,这个类继承于 yii 的 urlManager 类,并且增加一个叫做 domainName 的属性。
namespace app\components; use Yii; use yii\helpers\Url; use yii\base\InvalidConfigException; class UrlManager extends yii\web\UrlManager { public $domainName; protected $_hostInfo; public function getProperDomain(){ if ( ! isset($this->domainName) || empty($this->domainName) ) { throw new InvalidConfigException('Request requires a domain name to be configured!'); } return $this->domainName; } public function getHostInfo(){ if ($this->_hostInfo === null) { $secure = Yii::$app->getRequest()->getIsSecureConnection(); $http = $secure ? 'https' : 'http'; if (isset($_SERVER['HTTP_HOST'])) { $this->_hostInfo = $http . '://' . $this->getProperDomain(); } elseif (isset($_SERVER['SERVER_NAME'])) { $this->_hostInfo = $http . '://' . $this->getProperDomain(); $port = $secure ? $this->getSecurePort() : $this->getPort(); if (($port !== 80 && !$secure) || ($port !== 443 && $secure)) { $this->_hostInfo .= ':' . $port; } } } return $this->_hostInfo; } }
思路其实很简单,就是我们重写了 getHostInfo 函数,将指定的 domainName 加上去。
配置config/web.php
我们在web.php的 components 中自定义一个叫做 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', ] ...
好了,此刻我们在任何一个模块或app下执行下面代码
echo Yii::$app->adminUrlManager->createAbsoluteUrl(['default/index']);
都会输出我们想要的绝对地址。
http://admin.abc.com/index.ph...目的达到了吧。
再说几句
今天是端午小长假第二天,因陪家人来龙潭大峡谷玩,晚上旅店的网络不好,刚刚编辑好发出来,实在不好意思,在这里我和北嫂也一起祝大家节日快乐,多陪陪家人,他们才是最重要的。
欢迎来到我的小站 更多yii2视频 http://nai8.me
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Yii2基础版程序多模块二级域名部署方案以及urlManager对二级域名绝对地址的改造方法
- 如何免费申请js.org二级域名
- 【技术分享】劫持一个国家的顶级域名之旅-域名后缀的隐藏威胁(下)
- 谷歌 .app 域名进入普遍可用期,主要域名注册商可注册
- nginx域名重定向
- golang如何解析域名
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。