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('外部地址','重定向代码')
语法说明
- 路由规则即是我们要在 URL 中显示出来规则,后面元素值部分是实际的 URL 地址及参数
- 路由规则中如果以 : 开头,表示动态变量,否则为静态地址
- 格式2的额外参数可以传入数组或者字符串
- 路由规则支持变量的数字约束定义,例如:'product/:id\d'=>'Products/Show'
- 路由规则非数字变量支持排除,例如 'news/:cate^add|edit|delete'=>'News/category'
- 路由规则支持完整匹配定义,例如:'product/:id\d$'=>'Products/Show'
- 路由规则中的静态地址部分不区分大小写
- 外部地址中如果要引用动态变量, 采用 :1、:2 的方式
- 规则路由可以支持 全动态和动静结合定义,例如 ':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 代表永久重定向。
ThinkPHP URL 路由简介的更多相关文章
- Django基础之二(URL路由)
URL路由 简介 对于高质量的web应用来说,使用简洁,优雅的URL路由是一个值得尊重的细节,Django可以随心所欲的设计URL,不受框架的约束 为了给一个应用设计URL,你需要一个Python模块 ...
- ThinkPHP中URL解析原理,以及URL路由使用教程!
几个概念: THINKPHP 是一个MVC框架,使用PATHINFO解析出分组名,模块名,方法名,以及参数. PATHINFO:就是 http://localhost/index.php/Home/I ...
- ThinkPHP - URL - 伪静态 - 路由 - 重写
URL: 一.URL规则 1.默认是区分大小写,可以修改(配置文件)为不区分大小写. 2. //修改URL大小写问题 'URL_CASE_INSENSITIVE' =>true, 如果模块名为 ...
- thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)
原文:thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成(十五) 本章节:详细介绍thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成 一.URL ...
- ThinkPHP URL伪静态、路由规则、重写、生成
一.URL规则 1.默认是区分大小写的 2.如果我们不想区分大小写可以改配置文件 'URL_CASE_INSENSITIVE'=>true,//url不区分大小写 ...
- ThinkPHP URL模式和URL重写
现在用的版本是TP3.1.3,这两天总是遇到NotFound的错误,解析路径错误,所以认真研究了一下手册,发现问题出在URL模式上面. URL模式 一般是使用U方法来生成路径,U方法的定义规则如下(方 ...
- 白话ASP.NET MVC之一:Url 路由
好久没有写关于ASP.NET MVC的东西了,虽然<ASP.NET MVC4框架揭秘>已经完完整整的看完一遍,但是感觉和一锅粥差不多,没什么可写的,因为我自己不理解,也就写不出来.现在开始 ...
- 前端路由简介以及vue-router实现原理
后端路由简介 路由这个概念最先是后端出现的.在以前用模板引擎开发页面时,经常会看到这样 http://www.xxx.com/login 大致流程可以看成这样: 浏览器发出请求 服务器监听到80端口( ...
- ASP.NET Web API路由系统:Web Host下的URL路由
ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于 ...
随机推荐
- 微信小程序--底部tab样式修改
tab图标个数是最少2个,最多5个 主题默认是默认的浅灰色线条 修改后(只有black和white两种样式修改) 在app.json中
- Mac下升级node到最新版本
建议先装n,再用n把node升级到最新稳定版: $ npm install -g n $ n stable
- go struct 抽象
package main import ( "fmt" ) //定义一个结构体Account type Account struct { AccountNo string Pwd ...
- java 将word转为PDF (100%与word软件转换一样)
jdk环境:jdk_8.0.1310.11_64 (64位) 1.引入pom文件 <!-- word转pdf(依赖windows本地的wps) --> <dependency& ...
- ASP.NET Core 中使用TypeScript
ASP.NET Core 注意:Visual Studio 2017和最新版本的ASP.NET的更新即将推出! 安装 ASP.NET Core 和 TypeScript 首先,若有必要请安装 ASP. ...
- 工信部<<大数据产业发展规划>>
大数据产业发展规划 (2016-2020年) 发布时间:2017-01-17 来源:规划司 数据是国家基础性战略资源,是21世纪的“钻石矿”.党中央.国务院高度重视大数据在经济社会发展中的作用,党的 ...
- Anaconda入门使用指南
打算学习 Python 来做数据分析的你,是不是在开始时就遇到各种麻烦呢? 到底该装 Python2 呢还是 Python3 ? 为什么安装 Python 时总是出错? 怎么安装工具包呢? 为什么提示 ...
- Facebook POP动效库使用教程
编者注:用Origami作iOS动效的同学如果愁怎么实现,可以把这个给开发看看作为参考哦 如果说Origami这款动效原型工具是Facebook Paper的幕后功臣,那么POP便是Origami的地 ...
- Ubuntu18.04+windows10双系统时间同步教程
前言: 系统安装windows10和Ubuntu18.04双系统后会出现时间不同步的情况,往往windows系统的时间会有错误,一般会有8个小时的误差. 原因: 主要因为本地时间与硬件时间的时差: 本 ...
- C89标准库函数手册
http://zh.cppreference.com/w/c 前言 ANSI C(C89)标准库函数共有15个头文件.这15个头文件分别为: 1.<assert.h> ...