ThinkPHP 路由配置详解:规则、正则与静态映射
本文详细解析 ThinkPHP 的路由机制,从开启路由的前置条件到动态规则、正则匹配及静态路由的配置方法,助你构建规范的 URL 结构。
路由配置前提与基础环境
在配置 ThinkPHP 路由之前,必须确保应用运行环境满足以下两个核心条件:
- 支持 PATH_INFO:URL 必须支持 PATH_INFO 模式(或兼容 URL 模式),普通的普通 URL 模式不支持路由功能。
- 开启路由开关:在配置文件
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框架路由开发的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









