2 Commits
Author SHA1 Message Date
laoyang adcf80af62 3.2.35 CDN 加速加启用开关 + 预制白/黑名单,勾了不填地址拒绝保存 #4
「启用 CDN 加速」复选框放在 CDN 段最前。不勾时下面填什么都不产生作用,
前台与没装该功能完全一致(三个入口 should_rewrite / rewrite_html /
buffer_start 都过 yang_cdn_active())。

预制名单写进输入框的 std,用户可直接增删改,保存后以用户内容为准:
  白名单 13 项(.avif .css .gif .jpeg .jpg .js .json .mp3 .mp4 .pdf
  .png .svg .webp);黑名单 13 项安全后缀(.php* .phtml .phar .env
  .sql .bak .log .ini .sh .htaccess)。同时 yang_cdn_defaults() 给同一份
  —— std 在运行时完全不生效,两处不同源就会出现「后台 13 项、前端 0 项」。

勾了开关但地址留空:保存被整单拒绝(validate_options 返回旧值),并
add_settings_error 提示。回调里绝不 update_option(会递归触发
sanitize_option_kratos,3.2.11 吃爆内存的路径)。另加 admin_init 进页面
提示,救「勾着但地址空」的老站点。

开关默认值按「地址是否非空」推算,老站点升级不丢加速;没填过地址的站点
默认不勾,避免第一次点保存就被「必须填地址」拦住。

顺带修掉 parse_url 对主机过于宽容导致的畸形地址(https://not a url at all
曾被当合法,会把全站静态资源拼成畸形地址)。

验证:_cdn335_logic.php 116/0 · _cdn335_falsify.php 22/0 ·
_admin335_cdn_check.py 74/0 · _admin335_falsify.py 23/0 ·
_pkgcheck335.py 117/0 · _pkgcheck335_falsify.py 27/0 ·
_cdn334_logic.php 92/0(向后兼容)· _cdn334_falsify.php 21/0
2026-10-25 17:10:06 +08:00
laoyang 40e09b6309 3.2.34 新增「CDN 加速」:地址 + 白名单 + 黑名单,黑名单优先 #3
后台「主题设置」新增第十一个标签页(邮件通知之后、自定义代码之前),
只有三个输入框:CDN 地址、白名单、黑名单。地址留空即关闭功能。

实现(inc/theme-cdn.php,新增):
- 输出缓冲挂在 template_redirect 优先级 1,改整页 HTML 的资源地址,
  覆盖主题 enqueue 之外的文章图片、插件输出、区块图片。
- 规则按字面形态自动识别七种写法:* / 扩展名 / 扩展名列表 /
  路径前缀 / 通配符 / 路径子串 / ~正则~。
- 单个纯字母词(jpg 与 uploads 分不出谁是扩展名)同时按扩展名与
  路径子串匹配,两个含义互斥,避免 uploads 规则静默失效。
- 黑名单先于白名单判定;硬性排除不受两套名单影响:以 / 结尾、
  页面/动态后缀、无扩展名、wp-admin/wp-json/wp-cron/xmlrpc/feed、
  非本站域名、非 http(s) 协议。
- 后台/REST/AJAX/feed/cron/定制器预览/CLI 一律不改写。
- 查询串与锚点原样保留(?ver= 丢了会一直吃旧缓存)。
- 子目录站:判规则用完整路径,拼 CDN 时剥掉站点子目录。
- 写错的正则编译时丢弃,避免每个资源抛一条 warning 刷满日志。

验证:
- inc/theme-cdn.php 逻辑探针 92/0,反向验证 21/0(M1~M15 逐条注入,
  含 M5 拆成三条覆盖协议相对/绝对/整页三条分支,M10/M13 组合注入)。
- 后台探针 56/0(真实渲染 + 几何 + 类型 + 说明块),反向验证 15/0。
- 包契约 69/0,反向验证 23/0(改 zip 内字节,不改源码)。
- 旧探针回归:toc330 101/0、admin330 88/0、admin328 13/0、
  pkgcheck331/332/333 全绿、e2e322/323 通过。
- 线上仅在 theme-update/ 发 zip + readme + update.json,未解包覆盖服务器主题目录。
2026-10-25 16:15:09 +08:00