规则路由是一种比较容易理解的路由定义方式,采用ThinkPHP设计的规则表达式来定义。

规则表达式

规则表达式通常包含静态地址和动态地址,或者两种地址的结合,例如下面都属于有效的规则表达式:

  1. 'my' => 'Member/myinfo', // 静态地址路由
  2. 'blog/:id' => 'Blog/read', // 静态地址和动态地址结合
  3. 'new/:year/:month/:day'=>'News/read', // 静态地址和动态地址结合
  4. ':user/:blog_id' =>'Blog/read',// 全动态地址

规则表达式的定义始终以“/”为参数分割符,不受URL_PATHINFO_DEPR设置的影响

每个参数中以“:”开头的参数都表示动态参数,并且会自动对应一个GET参数,例如:id表示该处匹配到的参数可以使用$_GET['id']方式获取,:year、 :month 、:day 则分别对应$_GET['year']、 $_GET['month'] 和 $_GET['day']

数字约束

支持对变量的类型检测,但仅仅支持数字类型的约束定义,例如

  1. 'blog/:id\d'=>'Blog/read',

表示只会匹配数字参数,如果你需要更加多的变量类型检测,请使用正则表达式定义来解决。

目前不支持长度约束,需要的话采用正则定义解决

函数支持

可以支持对路由变量的函数过滤,例如:

  1. 'blog/:id\d|md5'=>'Blog/read',

表示对匹配到的id变量进行md5处理,也就是说,实际传入read操作方法的$_GET['id'] 其实是 md5($_GET['id'])

注意:不支持对变量使用多次函数处理和函数额外参数传入。

可选定义

支持对路由参数的可选定义,例如:

  1. 'blog/:year\d/[:month\d]'=>'Blog/archive',

[:month\d]变量用[ ]包含起来后就表示该变量是路由匹配的可选变量。

以上定义路由规则后,下面的URL访问地址都可以被正确的路由匹配:

  1. http://serverName/index.php/Home/blog/2013
  2. http://serverName/index.php/Home/blog/2013/12

采用可选变量定义后,之前需要定义两个或者多个路由规则才能处理的情况可以合并为一个路由规则。

可选参数只能放到路由规则的最后,如果在中间使用了可选参数的话,后面的变量都会变成可选参数。

规则排除

非数字变量支持简单的排除功能,主要是起到避免解析混淆的作用,例如:

  1. 'news/:cate^add|edit|delete'=>'News/category'

3.2.2版本开始,为了避免和函数规则冲突,规则路由排除分隔符改为“-”,所以上面的路由定义需要改为: 'news/:cate^add-edit-delete'=>'News/category'

因为规则定义的局限性,恰巧我们的路由规则里面的news和实际的news模块是相同的命名,而:cate并不能自动区分当前URL里面的动态参数是实际的操作名还是路由变量,所以为了避免混淆,我们需要对路由变量cate进行一些排除以帮助我们进行更精确的路由匹配,格式^add|edit|delete 表示,匹配除了add edit 和delete之外的所有字符串,我们建议更好的方式还是改进你的路由规则,避免路由规则和模块同名的情况存在,例如

  1. 'new/:cate'=>'News/category'

就可以更简单的定义路由规则了。

完全匹配

规则匹配检测的时候只是对URL从头开始匹配,只要URL地址包含了定义的路由规则就会匹配成功,如果希望完全匹配,可以使用$符号,例如:

  1. 'new/:cate$'=> 'News/category'

http://serverName/index.php/Home/new/info

会匹配成功,而

http://serverName/index.php/Home/new/info/2

则不会匹配成功。、

大理石平台精度等级

如果是采用

  1. 'new/:cate'=> 'News/category'

方式定义的话,则两种方式的URL访问都可以匹配成功。

完全匹配的路由规则中如果使用可选参数的话将会无效。

 

thinkphp 规则路由的更多相关文章

  1. ThinkPHP URL 路由简介

    简单的说,URL 路由就是允许你在一定规则下定制你需要的 URL 样子,以达到美化 URL ,提高用户体验,也有益于搜索引擎收录的目的. 例子 原本的 URL 为: http://www.5idev. ...

  2. thinkphp 静态路由

    静态路由其实属于规则路由的静态简化版(又称为URL映射),路由定义中不包含动态参数,静态路由不需要遍历路由规则而是直接定位,因此效率较高,但作用也有限. 如果我们定义了下面的静态路由 'URL_ROU ...

  3. ThinkPHP的路由规则和URL生成,结合django的URL理解

    这个知识点,我觉得蛮重要的. 不作任何路由定义的TP,URL格式和controller之间,相当于强绑定. 路由配置,让URL和controller的关系可以自定义. URL生成,让controlle ...

  4. Thinkphp中路由Url获取的使用方法

    Thinkphp是一个体系较为完整的框架,很多地方比国外的框架功能都全,唯一不喜之处是性能,和传说中的.NET有点像. Thinkphp提供较全url处理体系,通过同一规则实现Url的路由和Url生成 ...

  5. ThinkPHP的路由形式

    首先解释一下,这里路由的意思是:系统从URL参数中分析出当前请求的分组.控制器.操作 .另外我的网址根目录是放在article目录下的,Thinkphp主要有下面几种路由形式 1.pathinfo路径 ...

  6. RabbitMQ之Topics(多规则路由)

    Exchange中基于direct类型无法基于多种规则进行路由. 例如分析syslog日志,不仅需要基于severity(info/warning/critical/error)进行路由,还需要基于a ...

  7. ThinkPHP重写路由,掩藏public/index.php

    在thinkPHP项目中,为了掩藏 public/index.php 路径时,需要修改相关的 Apache httpd.confi 文件.ThinkPHP .htaccess文件 修改 Apache ...

  8. thinkphp 正则路由

    正则路由也就是采用正则表达式定义路由的一种方式,依靠强大的正则表达式,能够定义更灵活的路由规则. 路由表达式支持的正则定义必须以“/”开头,否则就视为规则表达式.也就是说如果采用: '#^blog\/ ...

  9. thinkphp中路由的基本使用

    1.在application中下的config.php中 以下代码改为true // 是否开启路由 'url_route_on' => true, // 是否强制使用路由 'url_route_ ...

随机推荐

  1. 2018年初面试Java(1.5年经验)

    xml文档如何解析 控制反转如何实现 http://www.cnblogs.com/qf123/p/8602972.html struts2和springmvc的区别 http://www.cnblo ...

  2. wc - 输出文件中的字节数、单词数、行数

    SYNOPSIS 总览 wc [选项列表]... [文件名列表]... DESCRIPTION 描述 对每个文件输出行.单词.和字节统计数,如果指定了多于一个文件则还有一个行数的总计.没有指定文件或指 ...

  3. 关于windows cmd的一些便捷应用

    在同事的指点下,我学会了一种非常方便的进入路径的方法 在windows文件夹中直接打开到要执行的文件的位置,然后在我的电脑那个路径当中输入cmd 之后,cmd的对话框会弹出来,并且显示在当前路径下,这 ...

  4. js字符与ASCII码互转的方法

    大写字母A-Z对应的ASCII码值是65-90 小写字母a-z对应的ASCII码值是97-122 将字母转为ascii码的方法: 将ascii码转为对应字母的方法:

  5. robotframework+python3+selenium之常用情景---第四集

    1.切换浏览器 2.切换frame/iframe 3.截图保存 3.1导入Screenshot包 3.2 编写自动化测试之截图 4.后续再补充

  6. vue computed和methods 计算属性和侦听器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. JMM 内存模型 与 volatile 关键字

    内存模型 线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory). 本地内存中存储了该线程以读/写共享变量的副本. 不同线程之间无法相互 ...

  8. OpenGL ANYTOOL

    { https://github.com/zhmmmm/ANYTOOL-2.0.0.0.2Version }

  9. 数位dp——牛客多校H

    /* x[1,A] y[1,B] x^y<C 或 x&y>C 把ABC拆成二进制后按位进行数位dp dp[pos][s1][s2][f1][f2] 表示从高到低第pos位,条件一状 ...

  10. [JZOJ 5817] 抄代码

    题意: 给定2T个串,带修的判断两个串是否按规则一样?? 思路: 两个串是"抄袭的"肯定就是: 1.长度一样. 2.特殊字符位置一样 3.对于每个\(x\)在两个串中出现位置一样, ...