问题完整原因 + 分步修复(栏目列表链接依旧是大写旧 URL,内容页已经成功小写) 核心根源
帝国 CMS列表页的文章链接读取数据表 filename 字段缓存;仅仅修改 ReturnInfoFileName、刷新内容页是没用的,列表静态 HTML、栏目缓存、JS‑调用缓存全部保留旧大写文件名,下面严格按照顺序操作即可一次性修好。 第一步:确认函数强制返回小写(优先排查代码漏洞)
打开 e/class/functions.php 的 ReturnInfoFileName,所有生成的文件名必须强制 strtolower(),哪怕别名、拼音也要强制小写,示例: php 运行 $name = strtolower($name); 复制代码 缺少 strtolower,部分场景依旧会输出大写字符,列表缓存旧数值。 第二步:数据库批量刷新每一条资讯的 filename(最关键) 后台 → 系统设置 → 【数据更新中心】 操作顺序不能打乱: 更新缓存数据 更新信息页地址(强制调用 ReturnInfoFileName,重写数据表里面 filename 字段为小写) 只有执行此项,news 数据表内存储的链接才会更新,列表标签才可以读取全新小写 url SQL 校验是否已经更新成功
sql SELECT id,filename FROM phome_ecms_news LIMIT 30; 复制代码
查看 filename 字段,全部变成小写才算成功,如果还有大写,再次执行「更新信息页地址」。 第三步:清理栏目列表缓存(绝大多数人卡在这一步)
帝国 CMS 栏目列表、灵动标签会生成缓存文件,缓存路径: e/data/fc/ListEnews.php 清除缓存两种方式
方式一(后台可视化) 数据更新中心 → 删除栏目缓存文件帝国CMS... 方式二,直接 FTP 删除缓存文件 plaintext e/data/fc/ListEnews.php 复制代码 第四步:刷新全部栏目列表静态页
返回数据更新中心: 刷新所有信息栏目页 刷新首页 刷新所有自定义列表 刷新所有 JS 调用信息 列表页 html 是静态文件,旧的列表页面里面依旧存放旧大写链接,必须重新生成栏目 html。 第五步:清除浏览器、CDN 缓存 Ctrl+F5 强制硬刷新 清空网站 CDN 缓存、宝塔缓存、nginx 缓存 关闭浏览器缓存进行测试 第六步、依旧无效的排查清单 修改完 functions‑php 没有保存上传 修改后的 php 文件没有上传覆盖服务器文件,程序仍然运行旧代码。 多内容模型 如果你有下载、图集模型,只更新了 news 新闻表,别的数据表 filename 没有刷新。 灵动标签缓存 页面使用 [ecmsinfo] 灵动标签,开启了标签缓存; 编辑标签,关闭缓存或者清空标签缓存。 模板变量缓存、碎片缓存 后台 > 模板管理,清理所有模板碎片缓存。 第七步、永久兜底:PHP 强制链接小写
如果你害怕后续还有大写残留,可以直接在列表输出的时候强制小写,列表模板链接代码改成: html 预览 <?=strtolower($bqsr[filename])?> 复制代码 标准完整执行顺序(以后修改 URL 命名规则固定这套流程) 修改并上传 functions.php 更新缓存数据 更新信息页地址 删除栏目缓存文件 ListEnews.php 刷新全部栏目列表页、首页、自定义列表 重载 CDN / 清除浏览器缓存
|