面向公开仓库做一次脱敏,去掉与开发者个人绑定的域名、内网入口与环境路径。 - 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。
41 lines
2.0 KiB
ApacheConf
41 lines
2.0 KiB
ApacheConf
# SimpleNav —— 根目录安全规则
|
|
<IfModule mod_rewrite.c>
|
|
RewriteEngine On
|
|
RewriteRule ^data/ - [F,L]
|
|
RewriteRule ^\.git/ - [F,L]
|
|
</IfModule>
|
|
# 关闭目录浏览
|
|
Options -Indexes
|
|
|
|
# 根目录静态资源(favicon / apple-touch-icon / webmanifest)也走「长缓存 + 版本号」
|
|
# 注意:assets/ 下的资源由 assets/.htaccess 负责,这里只管根目录这几个文件。
|
|
<IfModule mod_headers.c>
|
|
<FilesMatch "\.(ico|png|svg|webmanifest)$">
|
|
Header set Cache-Control "public, max-age=31536000, immutable"
|
|
</FilesMatch>
|
|
</IfModule>
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 绕开「服务器侧整页缓存」
|
|
#
|
|
# 背景(2026-09-28 线上实测):服务器装了宝塔面板的「网站加速」,那是一层基于
|
|
# memcached 的整页缓存(脚本 /www/server/speed/httpd_speed.lua,站点配置
|
|
# /www/server/speed/config.lua 里该站点那一节,expire=30 秒)。它的缓存键
|
|
# 按 host:port + 完整 URI 计算,只缓存 GET 的 text/html。
|
|
#
|
|
# 关键坑:它**读不到 FastCGI 后端返回的 Cache-Control**(实测存下来的副本里
|
|
# 根本没有这个头),所以 PHP 里发的 no-store / no-cache 对它无效 —— 会出现
|
|
# 「后台改完,前台刷新还是旧的」,而且因为每次 MISS 都会重新写入,旧页面窗口
|
|
# 还会被后续访问不断续期(滑动 30 秒)。
|
|
#
|
|
# 它唯一认的「别缓存我」信号是**请求** cookie `X_CACHE=1`(它本来用于标记已登录
|
|
# 用户)。这里就在请求侧直接注入该标记:edit 处理「已经有 Cookie」的情况,
|
|
# setifempty 处理「完全没有 Cookie」的首次访问。
|
|
#
|
|
# 若哪天不需要了(例如该站点已关闭「网站加速」),整段删掉即可。
|
|
# ---------------------------------------------------------------------------
|
|
<IfModule mod_headers.c>
|
|
RequestHeader edit Cookie "^(.*)$" "$1; X_CACHE=1"
|
|
RequestHeader setifempty Cookie "X_CACHE=1"
|
|
</IfModule>
|