提示
本部分内容适用于 ThinkPHP V2.0版本,如果您需要了解其他版本的路由,请参考:
URL 路由简介
简单的说,URL 路由就是允许你定制你需要的 URL 样子,这样做会美化 URL ,提高用户体验,也有益于搜索引擎的收录。
例子:
原本的 URL 为:http://www.5idev.com/index.php/Products/Show/Category/5/Products_id/123/status/1
经过 URL 路由改写后 URL 可以为:
http://www.5idev.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 泛路由 。