问题背景:

在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. Docker 下部署hadoop集群

    一.主机规划 3台主机:1个master.2个slaver/worker ip地址使用docker默认的分配地址: master: 主机名: hadoop2.ip地址: 172.17.0.2 slav ...

  2. js打印前几天或后几天的日期

    <script language="JavaScript" type="text/javascript">function dater(sj){ v ...

  3. Redis入门-02-CentOS7环境搭建

    CentOS7下redis安装过程,安装后需要开启端口号6379 #下载 wget http://download.redis.io/releases/redis-3.2.4.tar.gz #解压 t ...

  4. Java连载74-字符串常用方法、正则表达式简介

    一.字符串相关的常用方法简介​ package com.bjpowernode.java_learning; ​ public class D74_1_StringCommonMethod { pub ...

  5. Java-公约公倍

    题目: 如果两个数很大,怎样求最大公约数,最小公倍数?如果是n个数呢?比如1000个数的最小公倍数 分析:求a和b的最大公约数——辗转相除法(又叫欧几里得定理).即找到一个数,能对a,b都除尽.对于这 ...

  6. C# 调用APlayer教程

    APlayer介绍 引擎介绍: APlayer 媒体播放引擎是迅雷公司从 年开始开发的通用音视频媒体文件播放内核. 迅雷看看播放器和迅雷影音就是使用 APlayer 作为播放内核,目前迅雷看看播放器在 ...

  7. Windows电脑最最最常用快捷键

                            快捷键组合                    作用 Ctrl+A 全选 Ctrl+S 保存 Ctrl+Z 撤销 Ctrl+X 剪切 Ctrl+C 复 ...

  8. Vue开发环境跨域访问

    Vue开发环境跨域访问其他服务器或者本机其他端口,需要配置项目中config/index.js文件,修改如下 module.exports = { dev: { // Paths assetsSubD ...

  9. kali linux中mariadb加上密码

    kali自带mysql.2019.4 中带得是:MariaDB.据说跟Mysql差不多.简单用了一下发现root用户可以不要密码进入Mysql! 这极不习惯,不输入密码感觉好像少了点什么.这肯定是权限 ...

  10. 收录了老师发的几个 download ebook and paper 的 webpage

    Library Genesis (important) http://zh.b-ok.org National Academic Press OpenStax CNX gen.lib.rus.ec l ...