ThinkPHP 路由配置详解:规则、正则与静态映射

远山来客
远山来客
发布时间:2026-10-13 | 5人浏览过
原创

本文详细解析 ThinkPHP 的路由机制,从开启路由的前置条件到动态规则、正则匹配及静态路由的配置方法,助你构建规范的 URL 结构。

路由配置前提与基础环境

在配置 ThinkPHP 路由之前,必须确保应用运行环境满足以下两个核心条件:

  1. 支持 PATH_INFO:URL 必须支持 PATH_INFO 模式(或兼容 URL 模式),普通的普通 URL 模式不支持路由功能。
  2. 开启路由开关:在配置文件 Application/Common/Conf/config.php 中设置 'URL_ROUTER_ON' => true。

此外,ThinkPHP 默认将请求指向 Home 模块下的 Index 控制器的 index 方法。若要访问其他控制器或方法,则需通过路由进行地址重写或跳转。

动态规则路由配置

动态路由使用 URL_ROUTE_RULES 参数进行配置,支持路径中的变量替换和参数传递。ThinkPHP 按定义顺序依次匹配规则,一旦匹配成功立即执行,后续规则不再判断。

第1步:定义基本路由规则

在配置文件中添加路由数组,格式为 '路由表达式' => '目标地址[&参数]'。例如:

'URL_ROUTE_RULES' => array(
    'blogs/:year/:month/:day' => array('Index/archive', 'status=1'),
    'blogs/:id'       => 'Index/read',
),
  • 变量命名::variableName 代表动态参数,如 :id。
  • 参数传递:目标地址后的字符串可作为额外参数传入控制器方法。

第2步:控制器方法接收参数

在上述示例中,访问 /index.php/Home/blogs/2 会触发 Index 控制器的 read 方法。对应代码如下:

public function read($id){
    echo "read page with " . $id;
}

若访问上述链接,页面将输出:read page with 2。

第3步:限制变量类型与后缀

为保证数据安全性,可对变量类型进行限制:

  • 整数限制:使用 \d 限定只接受数字。例如 'blogs/:id\d' => 'Index/read'。
  • 可选参数:使用方括号 [] 包裹可选部分。例如 '/article/:id[/:page]' 表示 page 参数非必填。
  • 后缀限制:在目标数组中指定 ext。例如 'news/:id' => array('Index/view', array('ext'=>'html')),仅当 URL 以 .html 结尾时生效。

正则路由与静态路由

第4步:配置正则路由

适用于复杂的 URL 解析。正则表达式必须以 / 开头,否则会被误判为普通规则。

'/^new/(\d{4})/(\d{2})$/' => 'Index/archive?year=:1&month=:2',

说明:

  • 括号 (...) 内的子模式内容可通过 :1, :2 等序号引用到路由地址参数中。

第5步:使用静态路由提升性能

静态路由(URL_MAP_RULES)不包含动态参数,直接通过完整字符匹配定位目标,执行效率最高。其格式简洁:

'URL_MAP_RULES' => array(
    'new/top' => 'Index/top?type=top'
),

注意事项:

  • 静态路由要求完整匹配,若 URL 包含多余参数(如 /new/top/var/test)将无法匹配该规则。
  • 此配置项通常用于高频访问的固定页面,可减少对路由规则的遍历消耗。

以上就是 ThinkPHP 路由配置的详细内容,更多关于 PHP Web框架路由开发的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表