SF

SiteForge · 环境自检 / 故障诊断

v2.2.0 · 诊断完成后请删除本文件

✓ 一切正常:配置文件、数据库连接、表结构、站点数据都已就绪,系统判定为"已安装"。

建议:如果访问 /admin/ 仍被跳到安装页,请确认浏览器访问的域名是否指向了另一个网站目录(同一个域名绑了两个站点、或根目录下存在第二份程序)。本页顶部"站点根目录"就是当前这次请求实际生效的那一份。

① 本次请求

站点根目录/www/wwwroot/baobiao.huishouku.com
生效的配置文件 config/config.php 正常
访问域名lanping.baobiao.huishouku.com
站点地址
(config 的 app.base_url)
(未配置,按当前访问自动推导)
本次访问协议 http (站点地址没写协议,不判断)
自动跳转协议
(程序行为 · v1.9.6 起)
不会 程序不把 http 跳 https、也不把 https 跳 http;唯一决定协议的是上方的「站点地址(base_url)」。 要换协议只改这一行;本次访问协议与它不一致时,跳转来自服务器 / 面板 / CDN / 浏览器 HSTS,请到那里关闭或调整。
代码加密 / ionCube
(v2.0.0 起移除)
不需要 本版本全部源码明文,不需要 ionCube Loader,也不需要任何加密扩展; 装上 PHP 7.4+ 与 MySQL 即可直接运行。
授权状态
(v2.0.0 起移除)
完整版 · 无任何限制 不需要卡密、不绑定域名、不联网校验、不会到期。所有模块与前台功能直接可用。
域名一致性
(后台「令牌校验失败」相关)
站点地址没写域名,不判断
会话存储目录
session.save_path
(空 → 用系统临时目录 /tmp) (未配置,交给 PHP 决定)
会话往返自检 本次已写入 —— 请刷新本页再看这里;刷新后若仍显示这句,说明会话存不下来
本次是否带回会话 Cookie 没有带回 (第一次访问本来就没有,刷新一次才会有)
令牌机制
(v1.9.5 起)
自包含签名令牌 —— 校验不查会话,会话丢了也照样能提交
令牌签发 · 验签自检 正常:现场签发一枚令牌并立即验签通过,改动一个字符即失效
签名密钥 已就绪(data/secret.key)
本次判定的协议 http (只有证据够硬才判成 https:判成 http 最多少一个 Secure 标志,判成 https 会让 Cookie 被浏览器丢掉)
登录 Cookie
SF_AUTH
没有带回 (没登录过就没有,正常;登录后有它,就不怕会话存不下来)
探测 Cookie
SF_CK
本次没有 (第一次访问本来就没有,刷新一次再看;刷新后仍然没有,才说明浏览器禁用了本站 Cookie)
相关限制 output_buffering=4096 · post_max_size=50M · max_input_vars=1000 · display_errors=1
本次请求 URI/check.php
脚本路径/check.php
PHP 版本8.2.35 (fpm-fcgi)
open_basedir/www/wwwroot/baobiao.huishouku.com/:/tmp/
PDO 驱动mysql / sqlite
数据库类型
(配置声明 / 实际连接)
mysql → mysql 一致

② 配置文件

config/config.php 存在 924 字节 · 修改于 2026-10-23 09:31:58
实际生效的数据库MySQL · baobiao_huishouk @ 127.0.0.1:3306
表前缀 sf_

③ SQLite 数据文件路径(用 MySQL 可跳过)

当前使用 MySQL,不涉及 SQLite 路径。

④ 数据库连接与表结构

连接 正常
表数量 存在 22 张 / 期望 21 张 ✓ 完整
库里已有的表 sf_blocks、sf_categories、sf_city_sites、sf_content、sf_customers、sf_domain_zones、sf_friend_links、sf_i18n、sf_i18n_missing、sf_inquiries、sf_landing_domains、sf_landing_views、sf_landings、sf_lexicon、sf_media、sf_nav、sf_pages、sf_promo_pages、sf_settings、sf_sites …(共 22 张)
关键表行数 sites=1   users=1   pages=6   blocks=32   content=35   landings=625100   domain_zones=20   lexicon=3439  
安装判定
(决定 /admin/ 会不会被跳走)
已安装 sites 表有 1 条记录 → 后台可以正常打开
当前域名是否命中域名段 baobiao.huishouku.com
子域名标识:lanping
命中时首页会输出该域名的单页;/admin/ 不受影响

⑤ 目录权限

config/ 可写 属主 www:www
data/ 可写 属主 www:www
data/sessions/ 可写 属主 www:www
uploads/ 可写 属主 www:www

⑥ 关键文件(15 / 16)

.htaccess 在 Apache 伪静态
nginx-rewrite.conf 在 Nginx 伪静态规则
index.php 在 前台入口
admin/index.php 在 后台入口
api/inquiry.php 在 留言接口
core/domain.php 在 泛域名路由引擎
core/landing.php 在 内容自动填充引擎
core/helpers.php 在 通用函数 + URL 兜底路由
core/seed_lexicon.php 在 内置词库
front/landing/_shared.php 在 模板公共部件
admin/modules/zones.php 在 后台·域名段
admin/modules/landings.php 在 后台·泛域名单页
admin/modules/bindings.php 在 后台·域名绑定
admin/modules/lexicon.php 在 后台·内容词库
routing-test.mjs 缺失 路由/绑定专项巡检脚本
sql/siteforge-mysql.sql 在 MySQL 建表脚本
front/landing/tpl-01~10.php 10 / 10 齐全

⑦ 前台路由体检

/news/8.html 文章详情 —— 应显示文章标题,不是「新闻资讯」
/products/1.html 产品详情 —— 应显示产品名,不是「产品中心」
/cities 服务城市导航页 —— 列出所有已启用站点
如果详情页打开后是列表页(标题显示「新闻资讯」或「产品中心」,而不是文章名或产品名), 说明服务器上的伪静态规则是旧版:Nginx 里 location ^~ /news 这种前缀匹配会抢在 location ~ ^/news/(\d+)\.html$ 之前命中, 于是详情页请求被当成列表页处理。
怎么处理:把站点伪静态换成程序包里的 nginx-rewrite.conf (宝塔 → 网站 → 设置 → 伪静态 → 粘贴保存),详情规则必须写在列表规则之前。
说明:程序已按 URL 自动纠正路由,所以即使不改规则,页面显示也是对的; 配对规则只是为了少一次内部跳转。上面的地址点开就能验证。

⑧ 前台是否残留后台入口

front/ 全目录扫描 干净 无 sf_admin_url() 调用、无后台字样
前台不会出现通往后台的链接或按钮。单页预览页顶部的信息条只留客观信息 (城市 / 品牌 / 行业 / 模板 / 域名 / 同城站点)—— 不挂操作按钮,也不出现 「后台预览 · 不计访问」这类标识文字;城市名与域名指向的是线上真实地址, 看完直接关标签页即可。

⑨ 404 页有没有被服务器换掉

内容不存在时,程序会输出带站头站尾、能点导航的 404 页(HTTP 状态仍是 404)。 但有些服务器配置会把它换成自带的那个白底黑字「404 Not Found」—— 看着像服务器故障,也看不出原因。最常见的两个原因:
① 站点配置里有 error_page 404 /404.html;,而站点根目录并没有 404.html;
② 站点配置里写了 fastcgi_intercept_errors on;,PHP 输出的错误页被 nginx 接管了。
下面这条检测是在你的浏览器里现场请求一次不存在的地址,看到的就是访客看到的东西,最可信。
/news/999999999.html 检测中…

⑩ 伪静态(美化地址)有没有生效

首页 / 是服务器直接去找 index.php,不依赖伪静态; 但 /products/、/news/1.html、/sitemap.xml 这些地址在磁盘上根本没有对应文件(内容是数据库里现拼的), 全靠伪静态规则把它们转发给 PHP。
所以最常见的故障长这样:首页能开,栏目页 / 文章详情 / 产品详情全是 404 —— Nginx 一看文件不存在就自己 404 了,PHP 连执行的机会都没有。
下面这条检测在你的浏览器里现场请求一次站点地图,一测便知。
/sitemap.xml 检测中…
安全提醒:本页会显示数据库地址与目录路径,诊断完成后请立即删除 check.php。
返回 后台 · 安装向导 · 一键修复