船说 CMS 搜索功能失效怎么修复
学完这篇,你能按顺序定位船说 CMS 搜索失效的原因,并把大部分「搜不到内容」的问题当场修好。
搜索失效通常只有三种表现:输入关键词后结果页空白、页面报 500/502 错误、或者一直转圈不返回。先分清是哪一种,能省掉一半排查时间。
第一步:确认故障属于哪一类
这一步要拿到搜索请求的真实状态码,判断后面该往哪条路走。
打开前台搜索框,输入一个你确定存在的关键词(比如某篇文章的完整标题),按 F12 打开浏览器开发者工具,切到 Network(网络)标签,再点搜索。找到 search 开头的那个请求,看 Status 状态码:
- 200 但列表为空 → 搜索逻辑或索引问题,跳到第三步。
- 500 / 502 → PHP 报错或进程崩溃,跳到第二步。
- 请求一直 pending → 大概率数据库卡死或慢查询,跳到第三步。
注意:一定要用「确定存在的完整标题」做测试词。用「的」「了」这类词测试,很多 CMS 默认过滤,会让你误判成功能坏了。
第二步:把报错内容挖出来
这一步的目的是让系统把真实错误吐出来,而不是给你一个白屏。
打开网站根目录的配置文件,船说 CMS 一般是 config/config.php 或 data/config.php,找到 debug 那一项,把 false 改成 true:
'debug' => true,
保存后刷新搜索页,报错信息会直接显示。改完记得改回 false。
如果配置文件里没有 debug 项,去看 PHP 错误日志。宝塔面板用户在「网站 → 设置 → 错误日志」里看,或者在「软件商店 → PHP 7.4 → 设置 → 日志」里找。
注意:如果报
Call to undefined function mb_strlen(),说明 PHP 没装 mbstring 扩展(中文搜索必须依赖它)。宝塔用户在「软件商店 → PHP → 安装扩展」里勾上 mbstring 装上即可。
第三步:检查数据表和搜索索引
搜索本质是一条 SQL 查询,表坏了或索引丢了,自然搜不出东西。
用 phpMyAdmin(宝塔面板「数据库 → 管理」可直达)登录,选中你网站的数据库。重点看两张表:内容主表(前缀常见是 cs_ 或 sc_,后面接 article、news 之类)和搜索索引表(表名里通常带 search 或 keyword)。
如果表名旁显示「使用中」或「崩溃」,勾选该表 → 下拉选「修复表」。也可以直接在 SQL 页执行:
REPAIR TABLE `cs_search`;
再确认全文索引还在:
SHOW INDEX FROM `cs_article`;
看结果里有没有 Fulltext 类型的索引。没有,说明索引被删了或建库时就没建成功。
第四步:重建搜索索引
修好表结构后索引内容往往是空的,必须重建。
进后台,菜单路径一般是:系统 → 系统设置(或「工具」)→ 更新缓存 / 重建搜索索引,点「开始重建」,等进度走完。
后台没这个按钮的话,可以手动清空后让程序自己补:在 phpMyAdmin 执行 TRUNCATE TABLE \cs_search\;,然后随便发布或编辑一篇文章,触发程序重新写入。
注意:重建期间前台搜索结果会不准,访问量大建议放到凌晨做。
第五步:排查伪静态规则
如果直接访问 search.php?kw=测试 有结果,但访问 search.html?kw=测试 是 404 或空白,那就是伪静态规则丢了。
Nginx 用户打开站点配置文件(宝塔:网站 → 设置 → 配置文件),检查 search 相关规则有没有被误删;Apache 用户看 .htaccess 是否还在。改完必须重载:宝塔「网站」页点「重载配置」,或命令行执行 nginx -s reload。
第六步:清缓存、校权限
删掉 data/cache/ 和 data/runtime/ 下的所有缓存文件(目录本身保留),再确认这两个目录的属主是 Web 运行用户(一般叫 www),权限 755:
chown -R www:www /www/wwwroot/你的站点/data
小结
- 先用 F12 看状态码分类:空白、500、卡死,三条路走法不同。
- 开 debug 看真实报错;中文搜索依赖 mbstring 扩展。
- phpMyAdmin 里 REPAIR TABLE 修表,SHOW INDEX 查全文索引。
- 后台「重建搜索索引」是修好数据后必做的一步。
- 直连 PHP 能搜、伪静态不能搜,就是 rewrite 规则的问题。
- 最后清缓存、校正 data 目录属主权限。
原文链接:https://www.gj0.com/thread-684.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。