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,未解包覆盖服务器主题目录。
This commit is contained in:
+78
-1
@@ -872,7 +872,84 @@ function kratos_options()
|
||||
);
|
||||
|
||||
/* ══════════════════════════════════════════════════════════
|
||||
* 十一、自定义代码 —— 兜底用,放最后
|
||||
* 十二、CDN 加速 —— 三个输入框,不多加
|
||||
*
|
||||
* 用户明确要求「一共就这 3 个选项,不要弄得太复杂」。
|
||||
* 所以这里没有开关、没有自动开关、没有服务商选择,只有:
|
||||
* CDN 地址 / 白名单 / 黑名单
|
||||
* 地址留空 = 功能关闭。这比再加一个「启用」勾选框更省事,
|
||||
* 也不会出现「勾了启用但没填地址」这种半配置状态。
|
||||
*
|
||||
* 匹配逻辑(写进说明里,让用户看得到):
|
||||
* 先看黑名单 → 命中就保持原地址
|
||||
* 黑名单没命中 → 再看白名单
|
||||
* 黑名单优先级高于白名单
|
||||
* ══════════════════════════════════════════════════════════ */
|
||||
$options[] = array(
|
||||
'name' => __('CDN 加速', 'kratos'),
|
||||
'type' => 'heading',
|
||||
);
|
||||
|
||||
$options[] = array(
|
||||
'name' => __('CDN 地址', 'kratos'),
|
||||
'desc' => __('资源的加速前缀,例如 <code>https://cdn.example.com</code>。可以不带协议(自动按 https 补全)。<b>留空即关闭整个功能</b>,站点行为与不装这项功能完全一致。', 'kratos'),
|
||||
'id' => 'cdn_url',
|
||||
'std' => '',
|
||||
'type' => 'text',
|
||||
'placeholder' => 'https://cdn.example.com',
|
||||
);
|
||||
|
||||
$options[] = array(
|
||||
'name' => __('白名单', 'kratos'),
|
||||
'desc' => __('命中这些规则的文件<b>才</b>走 CDN。一行一条,<code>#</code> 或 <code>;</code> 开头的行是注释。<b>留空 = 所有静态文件都走 CDN</b>。', 'kratos'),
|
||||
'id' => 'cdn_include',
|
||||
'std' => '',
|
||||
'type' => 'code',
|
||||
'settings' => array('rows' => 10),
|
||||
);
|
||||
|
||||
$options[] = array(
|
||||
'name' => __('白名单写法', 'kratos'),
|
||||
'desc' => __('按<b>路径</b>匹配(正则规则除外,它对完整地址匹配)。下面每种写法都可以直接抄:', 'kratos')
|
||||
. '<br><code>*</code> —— 全部静态文件'
|
||||
. '<br><code>jpg</code> 或 <code>.jpg</code> 或 <code>*.jpg</code> —— 扩展名'
|
||||
. '<br><code>jpg,png,webp</code> 或 <code>.jpg .png</code> —— 一串扩展名,命中任一'
|
||||
. '<br><code>/wp-content/uploads/</code> —— 以这个路径开头(以斜杠开头、不含星号)'
|
||||
. '<br><code>*/uploads/*</code> —— 通配符,<code>*</code> 可以跨斜杠'
|
||||
. '<br><code>uploads</code> —— 路径里含这几个字(子串)'
|
||||
. '<br><code>~\/20\d\d\/~</code> —— 正则,对完整地址匹配',
|
||||
'type' => 'info',
|
||||
);
|
||||
|
||||
$options[] = array(
|
||||
'name' => __('黑名单', 'kratos'),
|
||||
'desc' => __('命中的文件<b>即使符合白名单也不走 CDN</b>,保持原地址。一行一条,写法与白名单完全相同。<b>黑名单优先于白名单</b>:两边都命中时按黑名单处理。', 'kratos'),
|
||||
'id' => 'cdn_exclude',
|
||||
'std' => '',
|
||||
'type' => 'code',
|
||||
'settings' => array('rows' => 10),
|
||||
);
|
||||
|
||||
$options[] = array(
|
||||
'name' => __('这些地址永远不走 CDN', 'kratos'),
|
||||
'desc' => __('下面这些不受两套名单影响,是硬性排除 —— 把它们改到 CDN 会让站点直接坏掉,所以不给开关:'
|
||||
. '<br>· <b>以斜杠结尾</b>的地址(页面、栏目页、导航链接):改了会让访客跳去 CDN 域名,全站 404'
|
||||
. '<br>· <b>页面与动态后缀</b>:<code>php</code>、<code>html</code>、<code>htm</code>、<code>asp</code> 等'
|
||||
. '<br>· <b>没有后缀</b>的地址:通常是接口、短链、伪静态页'
|
||||
. '<br>· <b>后台与接口路径</b>:<code>wp-admin</code>、<code>wp-login.php</code>、<code>wp-json</code>、<code>wp-cron.php</code>、<code>xmlrpc.php</code>、<code>/feed/</code>'
|
||||
. '<br>· <b>非本站域名</b>:外链图片、别人家的 CDN'
|
||||
. '<br>· <b>非 http(s) 协议</b>:<code>data:</code>、<code>mailto:</code>、<code>tel:</code>、<code>javascript:</code>', 'kratos'),
|
||||
'type' => 'info',
|
||||
);
|
||||
|
||||
$options[] = array(
|
||||
'name' => __('后台与接口里不改写', 'kratos'),
|
||||
'desc' => __('为了不影响编辑与调试,下面这些地方<b>保持原地址</b>:后台页面、REST 接口、AJAX 请求、feed 订阅、WP-Cron、定制器预览、命令行。只有访客看到的前台页面才改写。', 'kratos'),
|
||||
'type' => 'info',
|
||||
);
|
||||
|
||||
/* ══════════════════════════════════════════════════════════
|
||||
* 十三、自定义代码 —— 兜底用,放最后
|
||||
*
|
||||
* 3.2.29 起这两项默认都为空:站点自己的通用样式
|
||||
* (段落缩进、h2 蓝条、列表缩进)已并入 assets/css/site.css,
|
||||
|
||||
Reference in New Issue
Block a user