ThinkPHP 2.0 URL 路由(2.0版本适用)


提示

本部分内容适用于 ThinkPHP V2.0版本,如果您需要了解其他版本的路由,请参考:

  1. ThinkPHP 3.0 路由
  2. ThinkPHP 2.1 路由

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

补充说明

  1. ThinkPHP 2.0 版本不支持路由名称大写,即 product 可以,Product 路由失效。
  2. 不要将路由名称配置与模块名称相同。
  3. 参数定义的内容应该是动态的参数,URL 地址需要按顺序传入实际的参数值。
  4. 额外参数的内容应该是固定的参数值,由 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 泛路由 。

参考阅读

  1. ThinkPHP URL访问模式
  2. ThinkPHP 项目配置
    ThinkPHP URL 路由功能详解与实例
    ThinkPHP URL 正则路由与实例
    ThinkPHP 使用U方法自动生成URL超链接
    ThinkPHP 2.0 URL 路由(2.0版本适用)
    ThinkPHP 2.0 泛路由使用详解(2.0 版本适用)
    ThinkPHP 2.1 版本 URL 路由规则对比 2.0 版本的变更
    ThinkPHP U方法中使用路由的问题与解决办法

zgguan.com(it学习网) — 提供最好的 XHTML教程DIV+CSS教程JavaScript教程PHP教程ThinkPHP教程