问题背景:

在router.php路由配置文件设置了二级域名和路由设置

use think\Route;
Route::domain('www','index');
Route::domain('admin','admin');
Route::domain('m','m'); Route::rule('show/:id','index/Article/item');
Route::rule('about_us','index/index/about_us');

遇到的问题:

访问 www.t.com/about_us 会访问  index/index/about_us 即index模块index控制器的about_us方法;

但是 访问 admin.t.com/about_us 也会访问  index/index/about_us ;这显然是我们不想看到的

解决思路:

能不能在Route的rule()中做一个判断?如果当前域名是绑定了admin模块的,但是设置的路由地址(即:index/index/about_us) 的模块不是admin模块,那么就忽略该路由设置

修改源码:

    /**
* 注册路由规则
* @access public
* @param string|array $rule 路由规则
* @param string $route 路由地址
* @param string $type 请求类型
* @param array $option 路由参数
* @param array $pattern 变量规则
* @return void
*/
public static function rule($rule, $route = '', $type = '*', $option = [], $pattern = [])
{
$r_data = explode('/',$route);
$host_data = explode('.',$_SERVER ['HTTP_HOST']);
if(count($r_data) == && count($host_data) == ){
$erji_host = $host_data[];
if(isset(self::$rules['domain'][$erji_host])){
if(self::$rules['domain'][$erji_host]['[bind]'][] != $r_data[]){
return false;
}
}
}
$group = self::getGroup('name'); if (!is_null($group)) {
// 路由分组
$option = array_merge(self::getGroup('option'), $option);
$pattern = array_merge(self::getGroup('pattern'), $pattern);
} $type = strtolower($type); if (strpos($type, '|')) {
$option['method'] = $type;
$type = '*';
}
if (is_array($rule) && empty($route)) {
foreach ($rule as $key => $val) {
if (is_numeric($key)) {
$key = array_shift($val);
}
if (is_array($val)) {
$route = $val[];
$option1 = array_merge($option, $val[]);
$pattern1 = array_merge($pattern, isset($val[]) ? $val[] : []);
} else {
$option1 = null;
$pattern1 = null;
$route = $val;
}
self::setRule($key, $route, $type, !is_null($option1) ? $option1 : $option, !is_null($pattern1) ? $pattern1 : $pattern, $group);
}
} else {
self::setRule($rule, $route, $type, $option, $pattern, $group);
} }

2019 11-13 07点36分:此方法并不好,在Route里面,判断前缀是m,index还是admin,然后在判断里面设置Route::set。。。更好

thinkphp 二级域名绑定模块,导致设置的路由被多域名共用的问题解决方案的更多相关文章

  1. apache支持中文域名绑定,apache支持中文域名绑定,教你怎样让apache支持中文域名绑定

    摘要:apache支持中文域名绑定,apache支持中文域名绑定,教你怎样让apache支持中文域名绑定,根据本人实际经验,叫你如何让apache支持中文域名绑定,绝对管用的让apache支持中文域名 ...

  2. linux下关于Apache设置二级域名绑定二级目录的方法

    背景:对于一些论坛网站,某些目录需要制定二级域名去访问,这时候就要在apache中用二级域名绑定二级目录. 方法: 1.首先你要找到apache安装路径,在apahce安装路径下的conf文件夹中找到 ...

  3. MVC利用Routing实现多域名绑定一个站点、二级域名以及二级域名注册Area

    最近有这么个需求:在一个站点上绑定多个域名,每个域名进去后都要进入不同的页面.实现了这个功能以后,对于有多个域名,且有虚拟空间,但是虚拟空间却只匹配有一个站点的用户来说,可以节省很多小钱钱. 很久以前 ...

  4. IIS7多域名绑定同一物理目录,设置不同默认文档的解决方案

    转载自 http://zzstudy.offcn.com/archives/6159 如何解决IIS7多域名绑定同一物理目录,设置不同的默认文档的问题? 因为在一个物理目录下只有一个web.confi ...

  5. Linux虚拟主机通过程序实现二级域名绑定到子目录

    虚拟主机中CP控制台不支持将二级域名绑定到子目录的功能,用户可以通过程序实现将二级域名绑定到子目录. 有两种方法将二级域名绑定到子目录: 1. 配置.htaccess, 通过伪静态代码实现.具体实现方 ...

  6. 解决IIS7多域名绑定同一物理目录,设置不同的默认文档的问题

    IIS7多域名绑定同一物理目录,设置不同的默认文档是没办法设置的,因为在一个物理目录下只有一个web.config,并且IIS7把默认文档设置写在这里,导致所有域名的默认文档设置共享.解决方法:1.进 ...

  7. 为阿里云ECS服务器二级域名绑定tomcat子目录,实现一个IP多个二级域名

    摘要:前几天租了阿里云ECS服务器,选择的Windows系统,并在服务器上部署了tomcat服务器,随后我又买了一个域名,可一个域名只能指向一个IP地址,包括二级域名也只能指向一个IP地址,并不能指向 ...

  8. .Net Core 二级域名绑定到指定的控制器

    在说二级域名绑定之前,先说一下.net core中的区域,关于区域这一块儿在很久之前的博客中,已经提过,详见<03-dotnet core创建区域[Areas]及后台搭建>,在这篇博客中, ...

  9. 二级域名绑定ECS

    关于阿里云域名的绑定,下面是个人的理解,如有错误请指出. 首先,任何域名都需要在阿里云备案后才可以使用, 如果是二级域名,不能单独备案,需要其顶级域名在阿里云备案. http://help.aliyu ...

随机推荐

  1. 吴裕雄--天生自然HADOOP操作实验学习笔记:hdfs分布式文件系统安装

    实验目的 复习安装jdk 学习免密码登录 掌握安装配置hdfs集群的方法 掌握hdfs集群的简单使用和检查其工作状态 实验原理 1.hdfs是什么 hadoop安装的第一部分是安装hdfs,hdfs是 ...

  2. 清北学堂—2020.1提高储备营—Day 1 morning(模拟、枚举、搜索)

    qbxt Day 1 morning --2020.1.17 济南 主讲:李佳实 目录一览 1.模拟和枚举 2.基础搜索算法(DFS.BFS.记忆化搜索)以及进阶搜索算法(纯靠自学) 总知识点:基础算 ...

  3. nginx tar包安装步骤

    1.将tar包通过 Xftb工具传输到远程服务器 2.通过 cd 命令进入存放nginx包的文件夹目录 3.tar -zxvf + 文件名 解压 4.cd nginx-1.12.0 进入源码目录 5. ...

  4. UVA12716-连续区间内反向寻因子法

    在涉及的题目中如果需要使用连续区间内的数据的因数,可以放弃使用%这种低效的方案,从因数的角度进行,UVA12716中对于代码的优化就利用了这个小技巧. 原题:https://vjudge.net/pr ...

  5. iPad成为Windows系统的第二屏幕

    一.Windows端软件准备 1.Splashtop Wired XDisplay Agent (官网下载     快速下载​) 2.iTunes (点击此处跳转至微软应用商店) 二.iPad端软件准 ...

  6. 设置 myeclipse 编码格式

    参考网址:https://jingyan.baidu.com/article/77b8dc7fc6e1626174eab6bb.html

  7. vue.js事件传值之子组件传向父组件以及$emit的使用

    在项目开发中,有时候会遇到一种需求比如是:在子组件中,通过一个事件,比如点击事件,去改变父组件中的某个值,下面来看看是怎么个流程 还是先截图目录结构 父组件为app.vue,components中的文 ...

  8. asp.net core 自定义基于 HttpContext 的 Serilog Enricher

    asp.net core 自定义基于 HttpContext 的 Serilog Enricher Intro 通过 HttpContext 我们可以拿到很多有用的信息,比如 Path/QuerySt ...

  9. 如何成为一名AI工程师

    如何成为一名AI工程师 step 前端:js,html,找准方向开始累积知识! 计算机/数学专业 python anaconda IDE pycharm/jupyter 熟悉基础语法,了解数据结构 刷 ...

  10. [CodeIgniter4]讲解-加载静态页

    讲解 本教程旨在向您介绍CodeIgniter框架和MVC体系结构的基本原理.它将向您展示如何以逐步的方式构造基本的CodeIgniter应用程序. 在本教程中,您将创建一个基本的新闻应用程序.您将从 ...