Files

41 lines
2.0 KiB
ApacheConf
Raw Permalink Normal View History

# 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>