5 Commits
Author SHA1 Message Date
laoyang 286a01beb8 安装向导 install.php + data/ 防护文件入库
install.php(新增):
- 环境自检(PHP 版本 / PDO SQLite / mbstring / GD / 网络抓取 / fileinfo
  / data 与 uploads 可写性),缺 GD 只警告不阻断
- 输入校验:用户名格式、密码 ≥6 位、两次一致
- 建库 + 建管理员 + 写 data/install.lock
- 已存在管理员时拒绝安装(防删锁重装夺权);锁文件删掉也不认
- 装完展示数据库信息(类型/路径/大小/表内条目数)

data/ 防护文件入库(关键安全修复):
- 原 .gitignore 整目录排除 /data/,导致 data/.htaccess 永远进不了仓库,
  部署后 data/ 没有禁止 Web 访问的规则 —— nav.db 可被公网直接下载,
  里面是管理员密码哈希和全部站点数据
- 改为 /data/* + 白名单放行 .htaccess、index.html
2026-11-03 21:14:40 +08:00
laoyang 92eb9d90be 后台上传站点图标:首页品牌图 + favicon + PWA 图标一起换
需求:后台新增设置,允许管理员上传自己的图标;上传后首页品牌图标与浏览器
标签页 favicon(以及「添加到手机主屏」图标)一起换成它。

要点:
- 一张上传图服务端居中裁剪成正方形,生成 16/32/48/64/180/192/512 +
  maskable 192/512 整套尺寸,并手工拼装多帧 favicon.ico。
- 单一来源 site_icon_url() 统一取址;site_icon_head() 被首页/登录页/后台
  三处共用;PWA manifest 改由 manifest.php 动态输出、maskable 也跟随 ——
  三处防线共同杜绝「首页换了、标签页还是旧的」这类半生效。
- 目录可写则落静态文件(最快);不可写的保守环境整套压进设置、由
  site-icon.php 按需输出,功能不因权限限制整块不可用。
- 与「网站列表里每个网站自己的图标」是两个维度:目录与设置键都分开,
  清理时互不误伤。

顺手修掉两个真问题:
- login.php / admin/_auth.php 各留了一行写死的 favicon,与新的
  site_icon_head() 并存 → head 里两条 rel="icon",是「上传了却没换」的
  温床。已删掉写死那两行。
- 自定义 favicon.ico 原先只塞 16+32 两帧,而内置是 16/32/48/64 四帧 ——
  换图标反而退步。已补齐 icon-64 并统一为 4 帧。
- setting() 的请求内缓存导致「同请求写后再读」拿到旧值(真实坑):
  settings_cache() 支持强制重载 + settings_reload(),写入后立即失效。

验证:单测 44/44(含只读目录动态回退)、HTTP 56/56、e2e 174/0、
反向验证 5 变体全部被抓住(含「写死残留」与「ico 只塞两帧」两个新哨兵)、
真机几何 360/390/768/1440 无溢出、线上直连桌面+移动端几何全绿、
线上诊断页走通「上传→前台全换→复原」。
2026-09-28 22:28:23 +08:00
laoyang 273074218c chore: 清除仓库中的开发者个人信息
面向公开仓库做一次脱敏,去掉与开发者个人绑定的域名、内网入口与环境路径。

- db.php:默认数据里的个人地址全部换成通用示例(原先是开发者的私有基础设施:
  带路径令牌的面板地址、若干内网服务入口,以及暴露学校身份的校内系统如教务 / BB / VPN / 财务)。
  分组结构(2 个网格板块 + 3 个合集板块)与条目数量保持不变,新装仍是一份可用的示例导航。
- README.md:去掉「复刻某站风格」的表述与示例路径里的个人域名;部署步骤改为通用写法
  (不再指向仓库外的私有脚本目录),并补上 Nginx 的 /data/ 拦截规则。
  顺带修正一处与实际不符的描述:原文档称「页面缓存插件无需任何特殊配置」,实测该插件读不到
  FastCGI 的 Cache-Control,实际是靠根 .htaccess 在请求侧注入 X_CACHE=1 才旁路掉的。
- .htaccess / config.php / functions.php / assets/css/style.css:注释里的个人域名改为通用表述。
- .gitignore:去掉开发者本机目录约定。
- LICENSE:版权署名由个人昵称改为 The SimpleNav Authors。

默认数据只在空库时写入,线上现有数据不受影响;本次无运行期行为变更。

验证:本地 php -l 全过;e2e 93/93;部署(双版本 php -l + 静态断言 + 文件哈希逐字节一致 +
HTTP 冒烟 + 缓存旁路自检 + Web 身份诊断)全绿,退出码 0。
2026-09-28 18:34:44 +08:00
laoyang b4b81ec45e chore: 把 deploy/ 与 data/ 移出版本库
- .gitignore 改为整目录忽略 /data/ 与 /deploy/(原先用 /data/* + 白名单,
  反而把 data/.htaccess、data/index.html 放进仓库)
- git rm --cached 移除 data/.htaccess、data/index.html、
  deploy/setup-simplenav-user.sh、deploy/nginx-simplenav-deny-data.conf
- 部署脚本移到 ~/code/_tooling/simplenav-deploy/,不再属于应用源码
- /data/ 的保护由站点根 .htaccess(RewriteRule ^data/ - [F,L])负责;
  nav.db 从未被提交,无凭据泄露
2026-09-28 16:18:09 +08:00
laoyang 6e83cc3ecc feat: 简航 SimpleNav 个人网站导航系统(PHP + SQLite)
- 前台:搜索引擎切换+联想下拉、网格板块(常用/工具)、合集标签页
- 后台:初始化/登录、网站/板块/引擎增删改、上下移排序
- 添加网站自动抓取名称与图标(存储于服务器),支持自定义简称
- 一键全部更新(批量刷新图标+名称,保留自定义简称)
- 搜索联想服务端代理(必应/百度/谷歌/搜狗/360/DuckDuckGo)
- 零依赖:原生 CSS/JS,PDO SQLite
2026-09-28 15:48:35 +08:00