资讯专栏INFORMATION COLUMN

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

Cristic / 2008人阅读

摘要:二级域名管理问题我们推荐使用来生成链接,而不是人为写这样,这样对以后适配规则的更改有莫大的好处。

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

完成的任务

将模块二级域名化

让urlManager支持二级域名

将模块二级域名化

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

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 appcomponents;

use Yii;
use yiihelpersUrl;
use yiiaseInvalidConfigException;

class UrlManager extends yiiwebUrlManager
{
    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" => "appcomponentsUrlManager",
    "domainName" => "admin.abc.com",
]
...

好了,此刻我们在任何一个模块或app下执行下面代码

echo Yii::$app->adminUrlManager->createAbsoluteUrl(["default/index"]);

都会输出我们想要的绝对地址。
http://admin.abc.com/index.ph...

目的达到了吧。

再说几句

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

欢迎来到我的小站 更多yii2视频 http://nai8.me

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23053.html

相关文章

  • 关于Yii2如何实现跨域SSO登录解析

    摘要:例如,淘宝登录的,登录成功的。所以思考如何实现这种跨域的登录就显得尤为重要了。需求分析进入登录页面的地址登录成功后跳转的地址下面我主要是以框架为例解说一下我是怎么实现这种跨越的登录的。 序言 近年来网络发展很快,参与网购的人越来越多,但是大家在网购的时候不知到有没有注意到无论是淘宝还是京东,他们用的都是二级域名,登录一个URL,登录成功后又是一个URL,作为一个开发者反正我是注意到了。...

    Anchorer 评论0 收藏0
  • 关于Yii2如何实现跨域SSO登录解析

    摘要:例如,淘宝登录的,登录成功的。所以思考如何实现这种跨域的登录就显得尤为重要了。需求分析进入登录页面的地址登录成功后跳转的地址下面我主要是以框架为例解说一下我是怎么实现这种跨越的登录的。 序言 近年来网络发展很快,参与网购的人越来越多,但是大家在网购的时候不知到有没有注意到无论是淘宝还是京东,他们用的都是二级域名,登录一个URL,登录成功后又是一个URL,作为一个开发者反正我是注意到了。...

    DirtyMind 评论0 收藏0
  • Yii2.0 RESTful API 之本控制

    摘要:之版本控制之前我写过两篇关于如何搭建,以及认证等处理,但是没有涉及到版本管理,今天就来谈谈版本管理如何实现。如果你还没有安装,你可以按照这里的说明进行安装。 Yii2.0 RESTful API 之版本控制 之前我写过两篇关于 Yii2.0 RESTful API 如何搭建,以及 认证 等处理,但是没有涉及到版本管理,今天就来谈谈版本管理如何实现。 索性就从头开始一步一步搭建吧,但是关...

    _ang 评论0 收藏0
  • UWAF推出IPv6合规解决方案,助力金融政府客户IPv6改造,更有1元体验尝鲜!

    摘要:近期,又迎来了一次重大升级,主要包括如下重点功能新增华南区域节点扩展包,推出合规解决方案,新增中国内地体验版。后续将进一步支持回源多区域部署等功能,助力政府金融企业快速安全的实现改造。Web系统承载着各企事业单位的门户、注册登录、业务执行等职责,很容易遭受各种类型的恶意流量攻击,影响应用可用性、损害安全性或消耗过多的资源,UCloud Web应用防火墙UWAF则可以有效保护用户的 Web 应...

    Tecode 评论0 收藏0
  • yii2 url 重写 隐藏 index.php 方法

    摘要:第一步不管是还是,想要隐藏文件,需要打开组件的配置,在进行后续的操作第二步下配置文件内容如下项目域名的配置整体是放在这个目录下面改目录下其中一个文件的内容域名项目地址下伪静态配置入口文件的同级目录下,放置文件内容如下 第一步 : 不管是 apache 还是 nginx ,想要隐藏 Index.php 文件,需要打开 urlManager 组件的配置,在进行后续的操作 show...

    csRyan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<