博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii2基础版程序多模块二级域名部署方案以及urlManager对二级域名绝对地址的改造方法...
阅读量:6169 次
发布时间:2019-06-21

本文共 2796 字,大约阅读时间需要 9 分钟。

这似乎是个老生常谈的问题,那就再谈一次吧,本文我们要完成两件事件。

完成的任务

  • 将模块二级域名化

  • 让urlManager支持二级域名

将模块二级域名化

我们有这样的两个模块,分别是 adminwechat ,接下来想做一件事情

http://wechat.abc.com ===> wechathttp://admin.abc.com ===> admin

废话少说,开始干货~?

解析一个二级域名

我们以 admin 为例,首先要解析 ,在各种云的域名控制面板。

配置 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来生成链接,而不是人为写 这样,这样对以后适配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']);

都会输出我们想要的绝对地址。

目的达到了吧。

再说几句

今天是端午小长假第二天,因陪家人来龙潭大峡谷玩,晚上旅店的网络不好,刚刚编辑好发出来,实在不好意思,在这里我和北嫂也一起祝大家节日快乐,多陪陪家人,他们才是最重要的。

欢迎来到我的小站 更多yii2视频

转载地址:http://tunba.baihongyu.com/

你可能感兴趣的文章
思科设备中查询筛选的命令精华
查看>>
大数据未来将呈现的八大发展趋势
查看>>
cm 升级
查看>>
创建数据库快照并恢复数据
查看>>
我的友情链接
查看>>
APP抓包——Fiddler工具
查看>>
java 图片处理
查看>>
博主制作的开源JAVA WEB游戏-《天命.罗生门》
查看>>
Windows软链脚本
查看>>
IOS开发之异步加载网络图片并缓存本地实现瀑布流(二)
查看>>
足球赛事球员信息api
查看>>
那些年我们经历过的运维
查看>>
安装带有调试信息的C库
查看>>
迷宫的基本实现
查看>>
Ajax跨域请求问题
查看>>
topic4:Qt入门之常用qt控件认知之Button系列
查看>>
jstack:Java堆栈跟踪工具
查看>>
源码安装 python3
查看>>
获取当前fragment
查看>>
linux centeros 7.4 修改主机名
查看>>