Typecho博客使用阿里云cdn和oss:handsome主题进阶版

Typecho使用阿里云cdn和oss

      • 设置前需要保证阿里云cdn和oss已配置好且可以正常使用
      • 一、准备工作
      • 二、修改 Handsome 主题的静态资源链接
        • 方法 1:直接修改主题文件(推荐)
        • 方法 2:通过主题设置自定义(方便)
      • 三、处理特殊资源
        • 1. 字体文件(如 .woff2)
        • 2. 懒加载占位图
      • 四、验证与调试
      • 五、使用typecho插件自动上传文件
      • 六、备份与回滚
      • 六、自动化同步(可选)
      • 七、常见问题
        • Q1:修改后页面布局错乱
        • Q2:CDN 缓存未更新
      • 八、常见错误分析与解决(补充)
        • 问题:资源404错误
        • 问题:OSS 403 Forbidden错误
        • 问题:CDN缓存与刷新
        • 问题:site.webmanifest语法错误

设置前需要保证阿里云cdn和oss已配置好且可以正常使用

一、准备工作

  1. 确认 OSS 资源已同步

    • 将主题的静态资源(CSS/JS/图片/字体)上传到 OSS Bucket,路径与本地保持一致。
      例如:将 /usr/themes/handsome/assets 同步到 OSS 的 /handsome/asserts
      在这里插入图片描述
  2. 验证 OSS 访问权限

    • 确保通过 https://static.blog.ybyq.wang/handsome/css/style.css 可直接访问文件。

二、修改 Handsome 主题的静态资源链接

方法 1:直接修改主题文件(推荐)
  1. 定位资源引用位置
    Handsome 主题的静态资源主要在以下文件中定义:

    • /usr/themes/handsome/component/header.php:头部 CSS/JS 引用。
    • /usr/themes/handsome/component/footer.php:底部 JS 引用。
    • /usr/themes/handsome/css//js//img/ 等目录下的文件。
  2. 替换资源域名

    • 打开 header.phpfooter.php,查找类似代码:
      <link rel="stylesheet" href="<?php $this->options->themeUrl('css/style.css'); ?>">
      <script src="<?php $this->options->themeUrl('js/main.js'); ?>"></script>
      
    • 修改为绝对路径,指向 OSS 地址:
      <link rel="stylesheet" href="https://static.blog.ybyq.wang/usr/themes/handsome/css/style.css">
      <script src="https://static.blog.ybyq.wang/usr/themes/handsome/js/main.js"></script>
      
  3. 版本化控制(可选)

    • 在 URL 后添加版本号,强制浏览器刷新缓存:
      <link rel="stylesheet" href="https://static.blog.ybyq.wang/usr/themes/handsome/css/style.css?v=20231001">
      
方法 2:通过主题设置自定义(方便)
  1. 利用 Handsome 的 CDN 设置功能
    • 登录 Typecho 后台,进入 外观 > Handsome 主题设置 > 基础设置
    • 查找 静态资源 CDN 地址自定义 CSS/JS 链接 选项,填写 OSS 地址:
      https://static.blog.ybyq.wang/handsome/assets
      
    • 保存设置后,主题会自动拼接路径(Handsome主题支持此功能)。
      后台设置

三、处理特殊资源

1. 字体文件(如 .woff2)
  • 修改字体文件路径,通常位于 CSS 文件中:
    /* 原代码 */
    @font-face {src: url('../fonts/iconfont.woff2') format('woff2');
    }/* 修改后 */
    @font-face {src: url('https://static.blog.ybyq.wang/usr/themes/handsome/fonts/iconfont.woff2') format('woff2');
    }
    
2. 懒加载占位图
  • 主题设置 > 外观设置 > 懒加载 中,将默认占位图替换为 OSS 地址(这个开启后会自动添加):
    https://static.blog.ybyq.wang/handsome/img/loading.gif
    

四、验证与调试

  1. 浏览器开发者工具

    • 打开 https://blog.ybyq.wang,按 F12 进入开发者工具,切换到 Network 选项卡。
    • 检查所有 CSS/JS/图片/字体请求是否来自 static.blog.ybyq.wang,状态码为 200304
  2. 强制刷新缓存

    • Ctrl+F5 强制刷新页面,避免本地缓存干扰。
  3. 混合内容警告

    • 确保所有 OSS 资源链接为 https://,若存在 http:// 请求,浏览器会提示不安全,需修正为 HTTPS。

五、使用typecho插件自动上传文件

  1. 使用插件AliOssForTypecho
    在这里插入图片描述

  2. 插件中的AccessKey在阿里云控制台中创建
    在这里插入图片描述

  3. 在阿里oss建立好usr/uploads/文件夹,使用插件上传后的图片会存储在里面
    在这里插入图片描述

  4. F5重载网站,检查图片路径是否为阿里云oss的路径
    在这里插入图片描述
    控制台显示,路径为https://static.blog.ybyq.wang/usr/uploads/,引用成功。


六、备份与回滚

  1. 备份主题文件
    • 修改前,将 /usr/themes/handsome/ 目录整体压缩备份。
  2. 快速回滚
    • 若修改后页面异常,直接上传备份文件恢复即可。

六、自动化同步(可选)

  1. 使用 ossutil 工具同步
    # 将本地主题资源实时同步到 OSS
    ossutil sync -u /www/wwwroot/blog.ybyq.wang/usr/themes/handsome/ oss://blog-static-ybyq/usr/themes/handsome/ --delete
    
  2. 宝塔面板定时任务
    • 添加 Shell 脚本,每天凌晨同步一次:
      ossutil64 cp -r /www/wwwroot/blog.ybyq.wang/usr/themes/handsome/ oss://blog-static-ybyq/usr/themes/handsome/ --update
      

使用这种同步方式需保持两边路径相同


七、常见问题

Q1:修改后页面布局错乱
  • 原因:资源路径错误或 OSS 文件未同步。
  • 解决
    1. 检查浏览器控制台报错信息,确认缺失的文件。
    2. 核对 OSS 中文件路径是否与代码中的引用一致。
    3. 检查目录名字是否正确
Q2:CDN 缓存未更新
  • 解决:在阿里云 CDN 控制台手动刷新对应文件的缓存,或在 URL 后添加版本号(如 ?v=20231002)。

通过以上步骤,Handsome 主题的静态资源将全部通过 OSS + CDN 加速,显著提升加载速度并降低服务器负载。


八、常见错误分析与解决(补充)

问题:资源404错误

错误示例:

GET https://blog.ybyq.wang/usr/themes/handsome/assets/js/main.min.js net::ERR_ABORTED 404 (Not Found)
GET https://blog.ybyq.wang/usr/themes/handsome/assets/css/main.min.css net::ERR_ABORTED 404 (Not Found)

解决方法

  1. 路径不一致问题:检查主题设置和OSS中的路径格式是否一致

    • 可能存在 /usr/themes/handsome/assets//handsome/assets/ 两种不同路径
    • 建议统一为一种路径格式,推荐使用与本地相同的完整路径 /usr/themes/handsome/assets/
  2. 修改主题设置

    • 进入 Handsome 主题设置 > 基础设置
    • 确认"静态资源CDN地址"填写完整路径:https://static.blog.ybyq.wang/usr/themes/handsome
    • 如果使用简化路径,确保OSS中的目录结构与之匹配
  3. 检查OSS中的文件是否已上传

    • 登录阿里云OSS控制台,确认所有静态资源文件都已正确上传
    • 测试直接访问OSS中的文件,例如:https://static.blog.ybyq.wang/usr/themes/handsome/assets/js/main.min.js
问题:OSS 403 Forbidden错误

错误示例:

GET https://static.blog.ybyq.wang/handsome/assets/js/features/jquery.pjax.min.js net::ERR_ABORTED 403 (Forbidden)

解决方法

  1. 检查Bucket权限设置

    • 登录OSS控制台
    • 选择您的Bucket > 权限管理 > 读写权限
    • 确保设置为"公共读"(推荐)或"公共读写"
  2. 检查Referer防盗链设置

    • 选择您的Bucket > 权限管理 > 防盗链
    • 如果启用了防盗链,确保添加了 blog.ybyq.wang 到白名单
    • 或者暂时关闭防盗链测试
  3. 检查CORS跨域设置

    • 选择您的Bucket > 权限管理 > 跨域设置
    • 添加规则:来源 https://blog.ybyq.wang,允许的方法 GET,允许的头 *
问题:CDN缓存与刷新

当修复问题后,CDN可能仍然提供旧的缓存内容,导致问题持续存在。

解决方法

  1. 手动刷新CDN缓存

    • 登录阿里云CDN控制台
    • 选择"刷新预热" > “刷新”
    • 添加需要刷新的URL或目录:
      • URL刷新: https://static.blog.ybyq.wang/usr/themes/handsome/assets/js/main.min.js
      • 目录刷新: https://static.blog.ybyq.wang/usr/themes/handsome/
  2. 添加版本号

    • 修改资源引用URL,添加版本参数强制浏览器获取新版本:
    <link rel="stylesheet" href="https://static.blog.ybyq.wang/usr/themes/handsome/assets/css/main.min.css?v=20250428">
    
问题:site.webmanifest语法错误

错误示例:

Manifest: Line: 1, column: 1, Syntax error.

解决方法

  1. 检查webmanifest文件

    • 在服务器上找到并打开 site.webmanifest 文件
    • 确保是有效的JSON格式
    • 基本格式应类似:
    {"name": "博客名称","short_name": "简称","icons": [{"src": "/icon-192x192.png","sizes": "192x192","type": "image/png"},{"src": "/icon-512x512.png","sizes": "512x512","type": "image/png"}],"theme_color": "#ffffff","background_color": "#ffffff","display": "standalone"
    }
    
  2. 如果不需要此功能,可以在主题中禁用:

    • 编辑 /usr/themes/handsome/component/header.php
    • 找到引用 site.webmanifest 的行,注释掉或删除

补充说明:如果网站仍然间歇性错乱,建议检查是否存在多个CDN配置冲突,或者是否启用了浏览器缓存(Service Worker)相关功能。有时候需要清除浏览器缓存并强制刷新(Ctrl+F5)来测试最新配置是否生效。


作者:xuan
个人博客:https://blog.ybyq.wang
欢迎访问我的博客,获取更多技术文章和教程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部署mongodb三幅本集群

背景&#xff1a;原先使用的mongodb采用的是SSPL协议&#xff0c;此协议客户检测到有bug&#xff0c;故需要替换mongodb的版本&#xff0c;原先采用helm部署的mongodb但是无法找到4.1.4版本的chart包&#xff0c;故手写yaml部署 1、部署mongodb-arbiter服务 这个服务是用来选…

jdk1.8.0_05 在 SpringBootTest Debug模式下奔溃

之前好好的项目&#xff0c;最近换了之前的电脑&#xff0c;但是在使用SpringBootTest 启动debug模式时&#xff0c;虚拟机就会奔溃&#xff0c;通过修改如果把 junit5 import org.junit.jupiter.api.Test; 修改为 junit4 ,就不奔溃了 import org.junit.Test; 但是这样的…

QGIS+mcp的安装和使用

QGISmcp的安装和使用 安装qgis_mcp 下载qgis_mcp&#xff1a; git clone https://github.com/jjsantos01/qgis_mcp.git安装uv uv是一个由Rust语言编写的python包管理工具&#xff0c;旨在提供比传统工具&#xff08;如 pip&#xff09;更高效的依赖管理和虚拟环境操作。 p…

厚铜pcb生产厂家哪家好?

在为您的项目选择厚铜PCB供应商时&#xff0c;技术实力、生产经验与交付能力是决定产品可靠性的关键。随着新能源汽车、工业电源、5G通信等领域对高电流承载、高效散热的需求激增&#xff0c;厚铜PCB&#xff08;铜厚3oz以上&#xff09;的工艺门槛不断提升。本文结合行业头部企…

再见,物理删除!MyBatis-Plus @TableLogic 优雅实现逻辑删除

在开发应用程序时&#xff0c;我们经常会遇到需要删除数据的场景。但直接从数据库中物理删除&#xff08;DELETE​&#xff09;数据有时并非最佳选择。为什么呢&#xff1f; 数据恢复: 一旦物理删除&#xff0c;数据通常难以恢复&#xff0c;误操作可能导致灾难性后果。审计追…

湖北理元理律师事务所:债务管理领域的平台化创新探索

随着中国居民负债率攀升至62%&#xff08;央行2023年数据&#xff09;&#xff0c;债务管理从个体需求演变为社会性课题。湖北理元理律师事务所通过“法律科技金融”的融合模式&#xff0c;构建了国内首个全链条债务管理平台&#xff0c;其服务逻辑与行业价值值得深度剖析。 平…

【更新】LLM Interview (2)

字数溢出&#xff0c;不解释 前文&#xff1a;llm interview (1) 文章目录 强化学习专题1 什么是RL&#xff1f;2 RL和监督、非监督、深度学习的区别3 RL中所谓的损失函数与深度学习中的损失函数有何区别&#xff1f;4 RL历史5 RL分类5.1 分类图示5.2 根据智能体动作选取方式分…

高性价比手机如何挑选?

这四个关键点&#xff0c;助你找到心仪机~ 一、性能强者&#xff1a;游戏娱乐畅快到底 处理器相当于手机的 “大脑”&#xff0c;处理速度快、能力强&#xff0c;运行大型游戏毫无压力。 搭配上大容量运存&#xff0c;多任务切换也能秒速完成&#xff0c;再也不怕游戏卡顿啦。…

测试—概念篇

1. 什么是需求 在多数软件公司&#xff0c;会有两部分需求&#xff0c;⼀部分是用户需求&#xff0c;⼀部分是软件需求。 1.1 用户需求 用户需求&#xff1a;可以简单理解为甲方提出的需求&#xff0c;如果没有甲方&#xff0c;那么就是终端用户使⽤产品时必须要完成的任务。…

HTML5好看的水果蔬菜在线商城网站源码系列模板7

文章目录 1.设计来源1.1 主界面1.2 关于我们界面1.3 商城界面1.4 商品信息界面1.5 我的账户界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#…

Atcoder Help 有关Atcoder 的介绍-1 涨分规则

AtCoder 的 Rating 计算系统基于改进的 Elo 算法&#xff0c;主要包含以下核心机制&#xff1a; 一、基础计算公式 Rating 是「表现分(Performance)」的加权平均值减去衰减函数 f ( n ) f(n) f(n)&#xff0c;其中&#xff1a; 新用户初始 f ( 1 ) 1200 f(1)1200 f(1)120…

设置右键打开VSCode

在日常的开发工作中&#xff0c;VSCode 是一款非常受欢迎的代码编辑器。为了更加便捷地使用它&#xff0c;我们可以将 VSCode 添加到右键菜单中&#xff0c;这样只需右键点击文件或文件夹&#xff0c;就能快速用 VSCode 打开&#xff0c;极大地提高工作效率。下面我就来介绍一下…

python密码学之密钥HSM硬件抽象层(HAL)

目录 摘要1. 项目背景与总体架构1.1 HSM 与 HAL 的必要性1.2 本项目目标1.3 模块化设计2. 自研轻量对称加密算法 SSC(SimpleSecureCipher)2.1 算法原理2.2 轮密钥扩展3. HAL 接口与安全内存模拟3.1 HAL 接口定义3.2 安全内存 SecureMemory4. PyQt6 GUI 设计与功能模块4.1 界面…

机器学习分类模型性能评估:应对类别不平衡的策略与指标

在机器学习的世界里&#xff0c;模型们就像一群努力破案的侦探&#xff0c;而数据就是它们的“犯罪现场”。今天&#xff0c;咱们的主角——一个自命不凡的分类模型&#xff0c;接到了一个看似简单的任务&#xff1a;揪出那些患有罕见疾病的患者。这听起来是不是很容易&#xf…

vue3代码规范管理;基于vite和vue3、 eslint、prettier、stylelint、husky规范;git触发eslint校验

前言 为提高前端代码格式化和规范开发。主要使用eslint、prettier、husky完成对git提交commit信息校验和代码eslint格式化校验&#xff0c;不符合要求的代码&#xff0c;提交不到仓库。 参考链接1 参考链接2 文章目录 前言一、效果图1.git提交触发eslint规范校验2.版本与分支名…

GCC 内建函数汇编展开详解

1. 引言 GNU 编译器集合&#xff08;GCC&#xff09;是广泛使用的开源编译器套件&#xff0c;支持多种编程语言&#xff0c;其中 C 语言编译器是其核心组件之一。在 C 语言编译过程中&#xff0c;GCC 不仅处理用户编写的标准 C 代码&#xff0c;还提供了一类特殊的函数——内建…

uniapp利用生命周期函数实现后台常驻示例

在 Uniapp 中&#xff0c;利用生命周期函数实现“后台常驻”主要是通过监听应用的前后台状态变化&#xff08; onHide 和 onShow &#xff09;&#xff0c;并结合 定时器、后台任务或状态保持逻辑 来实现。但需注意&#xff1a; 纯前端 JS 代码无法突破系统对后台应用的限制&am…

layui时间范围

//时间范围String time_range para.getString("time_range", "");if (!StrUtil.isEmpty(time_range)) {String dateArr[] time_range.split("-");if (dateArr.length 2) {para.put("start_date", dateArr[0].trim().replace("…

入门版 鸿蒙 组件导航 (Navigation)

入门版 鸿蒙 组件导航 (Navigation) 注意&#xff1a;使用 DevEco Studio 运行本案例&#xff0c;要使用模拟器&#xff0c;千万不要用预览器&#xff0c;预览器看看 Navigation 布局还是可以的 效果&#xff1a;点击首页&#xff08;Index&#xff09;跳转到页面&#xff08…

VUE3:封装一个评论回复组件

之前用React封装的评论回复组件&#xff0c;里面有三个主要部分&#xff1a;CommentComponent作为主组件&#xff0c;CommentItem处理单个评论项&#xff0c;CommentInput负责输入框。现在需要将这些转换为Vue3的组件。 Vue3和React在状态管理上有所不同&#xff0c;Vue3使用r…