本部分内容适用于 ThinkPHP V2.0版本,如果您需要了解其他版本的路由,请参考:
ThinkPHP 3.0 路由
ThinkPHP
2.1 路由
URL 路由简介
简单的说,URL 路由就是允许你定制你需要的 URL 样子,这样做会美化 URL
,提高用户体验,也有益于搜索引擎的收录。
例子:
原本的 URL
为:http://www.phplo.com/index.php/Products/Show/Category/5/Products_id/123/status/1
经过
URL 路由改写后 URL
可以为:
http://www.phplo.com/index.php/product/5/123
当然,使用 Apache 的
URL Rewrite 规则也能达到 URL 定制的功能,在此就不展开了,请参看 Apache Rewrite 相关的文章。
ThinkPHP URL
路由配置
在 ThinkPHP 中要使用 URL 路由功能,需要做如下配置:
在项目配置文件 config.php
里面开启路由功能(设置为 true):
'URL_ROUTER_ON' => true,
在项目配置目录 Conf
下创建路路由定义文件,文件名为 routes.php ,注意使用 UTF-8 编码。
路由规则定义
路由规则定义于 routes.php
文件内,格式为数组格式,具体定义规则又分为常规路由和泛路由,语法如下:
- return array(
- // 常规路由
- '路由名称'=>array('模块名称', '操作名称', '参数定义', '额外参数'),
-
- // 泛路由
- '路由名称@'=>array(
- array('路由匹配正则', '模块名称', '操作名称', '参数定义', '额外参数'),
- ),
- ...更多的路由名称定义
- )
路由规则参数中,参数定义和额外参数是可选项,可以根据实际情况选择性使用。
如果在配置文件里定义了路由开启功能,系统在执行
Dispatch 解析的时候,会判断当前 URL 是否存在定义的路由名称,如果有就会按照定义的路由规则来进行 URL 解析。
ThinkPHP URL
路由实例
以本文开始的例子为例,看该路由是如何定义的:
return array(
//
常规路由
'product'=>array('Products', 'show', 'category,product_id',
'status=1'),
)
这样当访问 index.php/product/5/123 时,实际访问的是
index.php/Products/show/category/5/product_id/123/status/1。
补充说明
ThinkPHP
2.0 版本不支持路由名称大写,即 product 可以,Product
路由失效。
不要将路由名称配置与模块名称相同。
参数定义的内容应该是动态的参数,URL
地址需要按顺序传入实际的参数值。
额外参数的内容应该是固定的参数值,由 ThinkPHP 在解析路由的时候,自动隐含传入而无需在 URL
中体现出来,且参数格式要普通格式,如:status=1&type=1。
解析到分组
如果启用了项目分组,而需要将路由解析至某个分组模块如
Admin 分组:
'product'=>array('Admin.Products', 'show',
'category,product_id',
'status=1'),
由于默认分组可以省略,因此如果解析至默认分组的话,可以不用加默认分组名称。
URL 兼容模式
如果
URL 使用了兼容模式,则上述 URL
地址应该为:index.php/?r=product&category=5&products_id=123。
以上是
ThinkPHP URL 路由配置说明及常规路由的用法实例,通过 URL 路由可以制造出更加友好和符合 SEO 的 URL
,要了解更加强大的泛路由,参见本节另一部分内容:ThinkPHP 泛路由 。
参考阅读
ThinkPHP
URL访问模式
ThinkPHP 项目配置