路由与 URL(s/c/m、伪静态)

迅睿用查询参数定位一次请求:s(应用)、c(控制器)、m(方法)。伪静态与自定义路由最终都会解析成这三项(及其它 GET 参数),再交给 Frame\Run 实例化控制器。

URL 三要素:s / c / m

参数含义默认 / 约定
s应用目录名可空;空表示走系统核心。特殊值 api 表示 API。会员中心为 member
c控制器类名默认 home(实际类名为 Home
m方法名默认 index

典型动态地址:

后台入口文件已定义 IS_ADMIN,一般仍通过 c / m(及可选 s)指定后台控制器。当前页 URI 可由类库取得,例如 \Phpcmf\Service::L('router')->uri(),格式多为 {app}/{c}/{m}

解析顺序(简要)

  1. Web 服务器把友好 URL 转到 public/index.php(服务器伪静态,见《伪静态配置》)。

  2. 引导阶段读取当前 URI(CMSURI),匹配 config/rewrite.php 或路由缓存,写入 $_GET(含 s/c/m)。

  3. 可选加载 config/router.php,按 URI 强制改写 $_GET

  4. 根据域名映射、首页锁定等再次调整 s/c/m

  5. Frame\Run::bootWeb() 按场景命名空间实例化控制器并调用方法。

伪静态解析:rewrite.php

文件:config/rewrite.php(或运行目录下同名文件)。键为正则(匹配 CMSURI),值为映射到的入口查询串:

  • $1$2…对应正则捕获组,写入对应 GET 参数。

  • 未写 c/m 时,系统会补默认 home/index

  • 匹配结果可缓存到 cache/route/,规则变更后建议后台更新缓存。

  • 自定义 URL 必须配置解析规则,否则无法打开页面。

服务器侧「把请求转给 index.php」与「rewrite.php 解析参数」是两步,缺一不可。部署代码生成方式见《伪静态配置》。

自定义路由补丁:router.php

文件:config/router.php。在伪静态解析之后执行,可按当前 URI(变量 $uu 等)直接改写 $_GET。示例:

适合个别固定路径的强制路由,复杂批量规则仍优先写在 rewrite.php


首页锁定

若存在 cache/index.lock,且当前为站点首页、非后台、非 API、未指定 s,系统可读出其中 应用/控制器/方法,强制作为首页入口。用于把首页直接交给某个应用控制器。

场景对照

需求做法
动态调试地址直接拼 ?s=&c=&m=
短链接 / SEO 地址服务器伪静态 + rewrite.php
个别 URI 强制跳转某控制器router.php
域名进指定应用后台配置 → domain_app.php
指定应用作为首页index.lock 或域名/路由配合

注意

  • s 对应应用目录须真实存在;会员、建站等还依赖是否已安装(install.lock)。

  • 保留名如 apiadminmembermodule 有特殊含义,自定义应用勿随意占用。

  • 改路由后若异常,先确认服务器重写生效,再检查 rewrite.php 语法,并更新缓存。

本文地址:https://m.xunruicms.com/doc/1477.html