ThinkPHP URL 路由简介

ThinkPHP URL 路由简介

 

简单的说,URL 路由就是允许你在一定规则下定制你需要的 URL 样子,以达到美化 URL ,提高用户体验,也有益于搜索引擎收录的目的。

例子

原本的 URL 为:

http://www.5idev.com/index.php/Products/Show/category/5/id/123

该 URL 的本意是显示第 5 分类中 id 为 123 的产品。经过 URL 路由改写后 URL 可以为:

http://www.5idev.com/index.php/product/5/123

如果使用 .htaccess 文件的 Rewrite 规则再把入口文件隐藏,则上面的 URL 可以进一步简化为:

http://www.5idev.com/product/5/123

这个 URL 地址就相对比较简单易容。

提示:使用 Apache 的 URL Rewrite 规则也能达到 URL 定制的功能,在此就不展开了,感兴趣的请参看 Apache Rewrite 相关的文章。

ThinkPHP URL 路由配置

在 ThinkPHP 中要使用 URL 路由功能,需要做如下配置:

项目配置文件 Conf/config.php 里面开启路由功能(设置为 true):

'URL_ROUTER_ON'	=> true,

路由规则定义

与 2.x 版本不同,3.0 路由规则定义于项目配置文件 config.php 内,格式为数组格式,具体定义规则又分为规则路由和正则路由。规则路由语法如下:

格式1:'路由规则'=>'[分组/模块/操作]?额外参数1=值1&额外参数2=值2...'
格式2:'路由规则'=>array('[分组/模块/操作]','额外参数1=值1&额外参数2=值2...') 
格式3:'路由规则'=>'外部地址'
格式4:'路由规则'=>array('外部地址','重定向代码') 

语法说明

  1. 路由规则即是我们要在 URL 中显示出来规则,后面元素值部分是实际的 URL 地址及参数
  2. 路由规则中如果以 : 开头,表示动态变量,否则为静态地址
  3. 格式2的额外参数可以传入数组或者字符串
  4. 路由规则支持变量的数字约束定义,例如:’product/:id\d’=>’Products/Show’
  5. 路由规则非数字变量支持排除,例如 ‘news/:cate^add|edit|delete’=>’News/category’
  6. 路由规则支持完整匹配定义,例如:’product/:id\d$’=>’Products/Show’
  7. 路由规则中的静态地址部分不区分大小写
  8. 外部地址中如果要引用动态变量, 采用 :1、:2 的方式
  9. 规则路由可以支持 全动态和动静结合定义,例如 ‘:user/blog/:id’=>’Home/Blog/user’

这些规则及语法说明比较晦涩难懂,下面会有实例来对照以便理解上述路由规则及语法说明。

如果在配置文件里定义了路由开启功能,系统在执行 Dispatch 解析的时候,会判断当前 URL 是否存在定义的路由名称,如果有就会按照定义的路由规则来进行 URL 解析。

ThinkPHP URL 路由实例

以本文开始的例子为例,看该路由是如何定义的。在项目配置文件 Conf/config.php 里定义如下规则:

//路由定义
'URL_ROUTE_RULES'=> array(
    'product/:category\d/:id\d'=>'Products/Show', //规则路由
),

当我们访问如下这个地址的时候:

http://www.5idev.com/index.php/product/5/123

会将该地址解析到 Products 模块的 Show 操作,并传入 get 参数 category=5&id=123。

如果有额外的固定参数,如 status=1,可以定义路由:

'product/:category\d/:id\d'=>'Products/Show?status=1', //规则路由

也即匹配下面这个 URL 地址:

http://www.5idev.com/index.php/product/5/123/1

上面都是按格式1来定义的路由,在有额外参数的情况下,可以转换为第2种定义格式:

'product/:category\d/:id\d'=>array('Products/Show','status=1') 

上面的路由规则中 \d 表示只匹配数字,当不加此约束时,则可匹配所有字符,这也是默认情况。如果要严格约定传入的参数格式,请使用正则路由定义规则

路由格式:外部地址

对于路由格式 3 和格式 4,则是检测到匹配的路由格式,则跳转到外部地址,区别是格式 4 有重定向代码,如 301 代表永久重定向。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/113177.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • idea激活码2021.9-激活码分享

    (idea激活码2021.9)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1STL5S9V8F-eyJsaWNlbnNlSWQi…

  • java 实现 按位异或_Java 按位异或的性质及其妙用

    java 实现 按位异或_Java 按位异或的性质及其妙用文章摘要:1、按位异或,可以简单理解成:不进位加法。即:1+1=0;0+0=0;1+0=1;2、任何数和自己异或结果为零。3、按位异或自反性。两次运算操作,可以将最后的结果还原。4、任何数和0做异或值不变,和1异或结果为原操作数取反。5、交换律。不使用中间变量,交换两个数。一、按位异或具有自反性。即:对同一个数据,进行两次按位异或操作,等于数据本身。intdisplayOptions=0x…

  • pythonjson字符串转json对象_gson解析json嵌套数组

    pythonjson字符串转json对象_gson解析json嵌套数组背景:给app写接口时经常会遇到将一个model转为json返回。问题:网上也有类似方法,只是搜索结果多少有些问题,总是搜了好一会儿才找到最简便的方法,但是只是简单些的对象,对于复杂的对象,还是不容易找到好的方式。方案(python3.6):对象转json:model类classPeople():def__init__(self,name,age,…

  • Python文件名后缀_python获取目录下所有文件的文件名

    Python文件名后缀_python获取目录下所有文件的文件名method使用os.path.splitext(file)[1]可获得以.开头的文件后缀名。codeimportosfile="Hello.py"assertos.path.splitext(file)[1]==".py"assertos.path.splitext(file)[1][1:]=="py"

  • 进程调度程序设计实验报告_进程调度模拟程序设计实验报告

    进程调度程序设计实验报告_进程调度模拟程序设计实验报告进程调度的设计与实现中文摘要无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。关键词进程调度C++优先级生命周期pidstatus前言实验目的1、综合应用下列知识点设计并实现操作系统的进程调度:邻接表,布…

  • python更新pip失败_findwindow函数

    python更新pip失败_findwindow函数我使用pywin32扩展来解决FindWindow问题.简单的C代码:intmain(){HWNDh=FindWindow(NULL,TEXT(“SomeApp”));if(h!=INVALID_HANDLE_VALUE)SetForegroundWindow(h);return0;}效果很好.与python相同:importwin32guih=win32gui.FindW…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号