Comprehensive Rust 删除课程页面后如何在 book.toml 添加 redirect 保证旧链接可访问
Comprehensive Rust 删除课程页面后如何在 book.toml 添加 redirect 保证旧链接可访问【免费下载链接】comprehensive-rustThis is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust.项目地址: https://gitcode.com/GitHub_Trending/co/comprehensive-rustComprehensive Rust 是一本用 mdBook 构建的 Rust 课程课程页面会随课程结构调整而移动或删除。删除src/下的.md页面后指向旧页面的链接会失效。项目通过book.toml中[output.html.redirect]段的跳转表redirect map解决这个问题为每个被删除的页面添加一条旧路径 → 新路径映射让访问旧地址的读者被重定向到新位置。本文说明如何添加这样的映射以及项目自带的 CI 检查是如何验证这些映射的。准备条件已克隆仓库本地有 git 历史CI 检查通过git diff对比origin/main本地验证同样依赖与某个 commit 的差异。已安装 Python 3验证脚本.github/workflows/check-redirects.py用它运行。课程本身的构建依赖mdbook、mdbook-svgbob 等按 README.md 的 Setup 一节安装先安装 Rust 和 Bazel然后运行cargo xtask install-tools。添加 redirect 条目本身只需要编辑book.toml构建验证mdbook build、mdbook serve要求见 CONTRIBUTING.md。在 book.toml 中添加 redirect 条目打开根目录的 book.toml找到[output.html.redirect]段。该段中的注释写明了格式约定# Redirects in the form of old-path new-path, where the new path # is relative to the old path. # # Please keep the table sorted and avoid multi-step redirects. [output.html.redirect] async/async-await.html ../concurrency/async/async-await.html concurrency.html concurrency/welcome.html三个要点全部来自该段注释与真实条目键是旧路径值是新路径且新路径相对于旧路径解析。例如async/async-await.html ../concurrency/async/async-await.html旧地址async/async-await.html指向新位置concurrency/async/async-await.html两者相差两级目录所以值带../。保持表按字典序排序keep the table sorted。避免多跳重定向avoid multi-step redirects不要把旧路径 A 指向 B、B 又指向 C而应让 A 直接指向最终页面。旧路径怎么推导CI 脚本 check-redirects.py 定义了推导规则被删除的.md文件去掉src/前缀、把.md换成.html就是 redirect 表里应有的键。例如删除src/async/futures.md键就是async/futures.html对应条目async/futures.html ../concurrency/async/futures.html值新路径同样相对于键解析。CI 脚本会把它还原回.md路径检查文件是否真实存在所以值的写法必须能让旧目录 新路径落到一个真实存在的.md文件上例如src/async/../concurrency/async/futures.html归一化后是src/concurrency/async/futures.md。目录页和重定向到站点根被删除的是目录入口页如structure.html时值可以带.htmlstructure.html running-the-course/course-structure.html。脚本允许键和值的扩展名是.html或空ALLOWED_REDIRECT_EXTENSIONS [.html, ]所以值也可以是目录路径。实际条目welcome.html ./就是把旧的欢迎页跳转到站点根。添加条目时把它按字母序插入[output.html.redirect]段中而不是追加到段尾。验证check-redirects 脚本与 CI项目内置了验证脚本 check-redirects.py用法来自脚本文档字符串python3 .github/workflows/check-redirects.py 仓库根目录 要对比的 commit如 origin/mainCI 中 check-redirects.yml 在每个 pull request 上运行checkout 时设置fetch-depth: 0拿完整历史然后执行python3 .github/workflows/check-redirects.py . origin/main脚本做三件事对应三种输出找出删除的文件git diff commit --diff-filterD --name-only筛选出src/下、以.md结尾的文件。检查缺失的 redirect每个删除文件的推导 HTML 路径必须出现在[output.html.redirect]的键里否则打印The following deleted files are missing a redirect entry in book.toml:并列出文件名。检查非法条目一行里必须恰好一个否则报Only one expected键和值的扩展名必须是.html或空否则报Invalid file extension. Path must be a directory or a file ending in .html.值按相对旧路径解析还原成.md后文件必须存在否则报could not find ...。退出码即判定标准存在非法条目或缺失的 redirect 时退出码为 1否则为 0。所以本地在提交前可以直接跑一遍确认python3 .github/workflows/check-redirects.py . origin/main输出为空、退出码 0 即通过有输出时按上面三类报错定位是漏加了条目还是新路径写错了。注意事项与后续脚本只检查删除的.md文件是否有 redirect它不会检查你新加的条目是否指向了想要的页面除了目标文件存在性。值写错但文件存在例如指向了错误的新页面脚本发现不了添加后要自己核对新旧路径的对应关系。写网页测试tests/目录WebdriverIO时GEMINI.md 的 Handling Redirects 一节提醒mdbook按book.toml的[output.html.redirect]做跳转测试导航应使用最终的非跳转 URL导航到会被重定向的地址浏览器跟随后可能丢掉 URL 查询参数导致依赖这些参数的功能测试失败。也就是说redirect 是给读者用的自动化测试里要绕开它。修改完book.toml后按 CONTRIBUTING.md 的要求确认mdbook build能通过、mdbook serve可用再用dprint fmt统一格式化然后提交 pull request 让 check-redirects 工作流在origin/main基线上做最终校验。【免费下载链接】comprehensive-rustThis is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust.项目地址: https://gitcode.com/GitHub_Trending/co/comprehensive-rust创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

FastAPI + 云服务器搭建高可用抽奖系统:概率设计、防超卖与部署全指南

FastAPI + 云服务器搭建高可用抽奖系统:概率设计、防超卖与部署全指南

去年帮朋友公司年会做过一次抽奖系统,当时用的是 Django Celery,整套下来配置繁琐,光环境就折腾了大半天。后来遇到店面周年庆的抽奖需求,我改用了 FastAPI 在云服务器上搭了个页面抽奖服务,从初始化到上线跑通&#…

2026/10/28 10:38:33 阅读更多 →
Dapr 1.15.7 补丁详解:Workflow 定时启动失效与 DynamoDB 状态存储兼容性修复

Dapr 1.15.7 补丁详解:Workflow 定时启动失效与 DynamoDB 状态存储兼容性修复

Dapr 1.15.7 补丁详解:Workflow 定时启动失效与 DynamoDB 状态存储兼容性修复 【免费下载链接】dapr Dapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration…

2026/10/25 18:48:13 阅读更多 →
社区药店系统Java毕设:从数据库设计到库存扣减的完整实战

社区药店系统Java毕设:从数据库设计到库存扣减的完整实战

做Java毕业设计,“社区药店系统”是个出现率极高的题目。但说实话,同样一个题目,有人能做出一个能过答辩、能写进简历、甚至敢在面试时拿出来讲的完整项目,有人做完就只是一个“能跑起来的CRUD”。差别不在题目本身,而…

2026/10/26 10:20:09 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/28 9:02:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/28 9:00:54 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 9:01:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →