From 1538a10519f2c542e9aa010b88565a6dbfb3d70e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 08:36:03 +0000 Subject: [PATCH] =?UTF-8?q?refactor(docs):=20cpp=5Fbackend=20=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E6=A0=91=E8=A7=84=E8=8C=83=E5=8C=96=20=E2=80=94=20?= =?UTF-8?q?=E4=B8=8B=E5=88=92=E7=BA=BF=20/=20=E5=A4=A7=E9=A9=BC=E5=B3=B0?= =?UTF-8?q?=20=E2=86=92=20kebab-case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景:Involution Hell 文档站全站命名约定是 kebab-case,但 cpp_backend 整棵 子树残留早期混用风格: - 下划线目录:cpp_backend / easy_compile - 大驼峰目录:Handwritten_pool_components - 下划线 + 大驼峰文件名:1_Handwritten_threadpool.md / 3_Make.md 等 批量规范化成 kebab-case,保留数字前缀以维持 sidebar 阅读顺序 (Fumadocs 按文件名字母序排 sidebar,去掉前缀会打乱 1→5 的教学顺序)。 变更: - 3 个目录 rename - 8 份原文 + 7 份 .en.md 翻译 = 17 个文件 git mv - next.config.mjs 新增 async redirects(),8 条老 URL → 新 canonical 301 映射 使用 statusCode:301(不是 permanent:true 的 308),两者 SEO 等价,选 301 因识别最稳、和 PR 描述口径一致。Next.js 源码 allowedStatusCodes 里合法。 验证: - git status 显示全部 R (rename),相似度 100% - docId 守恒:grep "^docId:" 对照 8 个 docId 全部原样保留 - pnpm typecheck 通过 - node 实测 next.config.mjs 的 redirects() 返回 8 条全 statusCode:301 合并顺序:和 PR #307 / #308 独立,互不冲突(改动在完全不同的目录)。 流程: 1. 建分支 feat/docs-filename-kebab-case 2. mkdir 新目录 + git mv 17 个文件 3. rmdir 旧空目录 4. 加 301 redirects 5. reviewer subagent 审稿:误报 1(statusCode 实测 OK)+ 非阻塞 1 (generated/ JSON 由 sync-uuid CI 自动 regen,不应手动改) 6. 采纳 reviewer 关于注释措辞的建议,修掉 "HTTP/1.0" 这个不准的词 --- .../easy-compile/1-cpp-libs.en.md} | 0 .../easy-compile/1-cpp-libs.md} | 0 .../easy-compile/2-base-gcc.en.md} | 0 .../easy-compile/2-base-gcc.md} | 0 .../easy-compile/3-make.en.md} | 0 .../easy-compile/3-make.md} | 0 .../easy-compile/4-cmake.en.md} | 0 .../easy-compile/4-cmake.md} | 0 .../easy-compile/5-vcpkg.en.md} | 0 .../easy-compile/5-vcpkg.md} | 0 .../1-handwritten-threadpool.en.md} | 0 .../1-handwritten-threadpool.md} | 0 .../2-handwritten-mempool1.en.md} | 0 .../2-handwritten-mempool1.md} | 0 .../mempool-simple.en.mdx} | 0 .../mempool-simple.mdx} | 0 next.config.mjs | 64 +++++++++++++++++++ 17 files changed, 64 insertions(+) rename app/docs/computer-science/{cpp_backend/easy_compile/1_cpp_libs.en.md => cpp-backend/easy-compile/1-cpp-libs.en.md} (100%) rename app/docs/computer-science/{cpp_backend/easy_compile/1_cpp_libs.md => cpp-backend/easy-compile/1-cpp-libs.md} (100%) rename app/docs/computer-science/{cpp_backend/easy_compile/2_base_gcc.en.md => cpp-backend/easy-compile/2-base-gcc.en.md} (100%) rename app/docs/computer-science/{cpp_backend/easy_compile/2_base_gcc.md => cpp-backend/easy-compile/2-base-gcc.md} (100%) rename app/docs/computer-science/{cpp_backend/easy_compile/3_Make.en.md => cpp-backend/easy-compile/3-make.en.md} (100%) rename app/docs/computer-science/{cpp_backend/easy_compile/3_Make.md => cpp-backend/easy-compile/3-make.md} (100%) rename app/docs/computer-science/{cpp_backend/easy_compile/4_CMake.en.md => cpp-backend/easy-compile/4-cmake.en.md} (100%) rename app/docs/computer-science/{cpp_backend/easy_compile/4_CMake.md => cpp-backend/easy-compile/4-cmake.md} (100%) rename app/docs/computer-science/{cpp_backend/easy_compile/5_vcpkg.en.md => cpp-backend/easy-compile/5-vcpkg.en.md} (100%) rename app/docs/computer-science/{cpp_backend/easy_compile/5_vcpkg.md => cpp-backend/easy-compile/5-vcpkg.md} (100%) rename app/docs/computer-science/{cpp_backend/Handwritten_pool_components/1_Handwritten_threadpool.en.md => cpp-backend/handwritten-pool-components/1-handwritten-threadpool.en.md} (100%) rename app/docs/computer-science/{cpp_backend/Handwritten_pool_components/1_Handwritten_threadpool.md => cpp-backend/handwritten-pool-components/1-handwritten-threadpool.md} (100%) rename app/docs/computer-science/{cpp_backend/Handwritten_pool_components/2_Handwritten_mempool1.en.md => cpp-backend/handwritten-pool-components/2-handwritten-mempool1.en.md} (100%) rename app/docs/computer-science/{cpp_backend/Handwritten_pool_components/2_Handwritten_mempool1.md => cpp-backend/handwritten-pool-components/2-handwritten-mempool1.md} (100%) rename app/docs/computer-science/{cpp_backend/mempool_simple.en.mdx => cpp-backend/mempool-simple.en.mdx} (100%) rename app/docs/computer-science/{cpp_backend/mempool_simple.mdx => cpp-backend/mempool-simple.mdx} (100%) diff --git a/app/docs/computer-science/cpp_backend/easy_compile/1_cpp_libs.en.md b/app/docs/computer-science/cpp-backend/easy-compile/1-cpp-libs.en.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/1_cpp_libs.en.md rename to app/docs/computer-science/cpp-backend/easy-compile/1-cpp-libs.en.md diff --git a/app/docs/computer-science/cpp_backend/easy_compile/1_cpp_libs.md b/app/docs/computer-science/cpp-backend/easy-compile/1-cpp-libs.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/1_cpp_libs.md rename to app/docs/computer-science/cpp-backend/easy-compile/1-cpp-libs.md diff --git a/app/docs/computer-science/cpp_backend/easy_compile/2_base_gcc.en.md b/app/docs/computer-science/cpp-backend/easy-compile/2-base-gcc.en.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/2_base_gcc.en.md rename to app/docs/computer-science/cpp-backend/easy-compile/2-base-gcc.en.md diff --git a/app/docs/computer-science/cpp_backend/easy_compile/2_base_gcc.md b/app/docs/computer-science/cpp-backend/easy-compile/2-base-gcc.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/2_base_gcc.md rename to app/docs/computer-science/cpp-backend/easy-compile/2-base-gcc.md diff --git a/app/docs/computer-science/cpp_backend/easy_compile/3_Make.en.md b/app/docs/computer-science/cpp-backend/easy-compile/3-make.en.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/3_Make.en.md rename to app/docs/computer-science/cpp-backend/easy-compile/3-make.en.md diff --git a/app/docs/computer-science/cpp_backend/easy_compile/3_Make.md b/app/docs/computer-science/cpp-backend/easy-compile/3-make.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/3_Make.md rename to app/docs/computer-science/cpp-backend/easy-compile/3-make.md diff --git a/app/docs/computer-science/cpp_backend/easy_compile/4_CMake.en.md b/app/docs/computer-science/cpp-backend/easy-compile/4-cmake.en.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/4_CMake.en.md rename to app/docs/computer-science/cpp-backend/easy-compile/4-cmake.en.md diff --git a/app/docs/computer-science/cpp_backend/easy_compile/4_CMake.md b/app/docs/computer-science/cpp-backend/easy-compile/4-cmake.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/4_CMake.md rename to app/docs/computer-science/cpp-backend/easy-compile/4-cmake.md diff --git a/app/docs/computer-science/cpp_backend/easy_compile/5_vcpkg.en.md b/app/docs/computer-science/cpp-backend/easy-compile/5-vcpkg.en.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/5_vcpkg.en.md rename to app/docs/computer-science/cpp-backend/easy-compile/5-vcpkg.en.md diff --git a/app/docs/computer-science/cpp_backend/easy_compile/5_vcpkg.md b/app/docs/computer-science/cpp-backend/easy-compile/5-vcpkg.md similarity index 100% rename from app/docs/computer-science/cpp_backend/easy_compile/5_vcpkg.md rename to app/docs/computer-science/cpp-backend/easy-compile/5-vcpkg.md diff --git a/app/docs/computer-science/cpp_backend/Handwritten_pool_components/1_Handwritten_threadpool.en.md b/app/docs/computer-science/cpp-backend/handwritten-pool-components/1-handwritten-threadpool.en.md similarity index 100% rename from app/docs/computer-science/cpp_backend/Handwritten_pool_components/1_Handwritten_threadpool.en.md rename to app/docs/computer-science/cpp-backend/handwritten-pool-components/1-handwritten-threadpool.en.md diff --git a/app/docs/computer-science/cpp_backend/Handwritten_pool_components/1_Handwritten_threadpool.md b/app/docs/computer-science/cpp-backend/handwritten-pool-components/1-handwritten-threadpool.md similarity index 100% rename from app/docs/computer-science/cpp_backend/Handwritten_pool_components/1_Handwritten_threadpool.md rename to app/docs/computer-science/cpp-backend/handwritten-pool-components/1-handwritten-threadpool.md diff --git a/app/docs/computer-science/cpp_backend/Handwritten_pool_components/2_Handwritten_mempool1.en.md b/app/docs/computer-science/cpp-backend/handwritten-pool-components/2-handwritten-mempool1.en.md similarity index 100% rename from app/docs/computer-science/cpp_backend/Handwritten_pool_components/2_Handwritten_mempool1.en.md rename to app/docs/computer-science/cpp-backend/handwritten-pool-components/2-handwritten-mempool1.en.md diff --git a/app/docs/computer-science/cpp_backend/Handwritten_pool_components/2_Handwritten_mempool1.md b/app/docs/computer-science/cpp-backend/handwritten-pool-components/2-handwritten-mempool1.md similarity index 100% rename from app/docs/computer-science/cpp_backend/Handwritten_pool_components/2_Handwritten_mempool1.md rename to app/docs/computer-science/cpp-backend/handwritten-pool-components/2-handwritten-mempool1.md diff --git a/app/docs/computer-science/cpp_backend/mempool_simple.en.mdx b/app/docs/computer-science/cpp-backend/mempool-simple.en.mdx similarity index 100% rename from app/docs/computer-science/cpp_backend/mempool_simple.en.mdx rename to app/docs/computer-science/cpp-backend/mempool-simple.en.mdx diff --git a/app/docs/computer-science/cpp_backend/mempool_simple.mdx b/app/docs/computer-science/cpp-backend/mempool-simple.mdx similarity index 100% rename from app/docs/computer-science/cpp_backend/mempool_simple.mdx rename to app/docs/computer-science/cpp-backend/mempool-simple.mdx diff --git a/next.config.mjs b/next.config.mjs index 567d8058..93ef5619 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -22,6 +22,70 @@ const withNextIntl = createNextIntlPlugin("./i18n/request.ts"); /** @type {import('next').NextConfig} */ const config = { reactStrictMode: true, + /** + * docs 目录整理产生的 URL 变化 → 301 重定向。 + * + * 为什么要 301:站点上线一段时间后,原路径被 Google 索引 + 被用户收藏 / 外链。 + * 改目录 / 文件名必然改 URL,不加 301 的话老链接 404,SEO 权重流失 + + * 用户体验断裂。statusCode:301 显式下发 "Moved Permanently"(不是 Next.js + * 默认 permanent:true 的 308)。两者 SEO 语义等价,选 301 因为识别最稳, + * 和 PR / commit 描述口径一致。statusCode 与 permanent 互斥;Next.js 源码 + * redirect-status.js 里 allowedStatusCodes = {301,302,303,307,308},合法。 + * + * 每次再动 docs 路径都要在这里补一条。 + */ + async redirects() { + return [ + // feat/docs-filename-kebab-case(2026-04-18) + // cpp_backend 目录树规范化:下划线 / 大驼峰 → kebab-case,保留数字前缀以维持 sidebar 顺序 + { + source: "/docs/computer-science/cpp_backend/mempool_simple", + destination: "/docs/computer-science/cpp-backend/mempool-simple", + statusCode: 301, + }, + { + source: + "/docs/computer-science/cpp_backend/Handwritten_pool_components/1_Handwritten_threadpool", + destination: + "/docs/computer-science/cpp-backend/handwritten-pool-components/1-handwritten-threadpool", + statusCode: 301, + }, + { + source: + "/docs/computer-science/cpp_backend/Handwritten_pool_components/2_Handwritten_mempool1", + destination: + "/docs/computer-science/cpp-backend/handwritten-pool-components/2-handwritten-mempool1", + statusCode: 301, + }, + { + source: "/docs/computer-science/cpp_backend/easy_compile/1_cpp_libs", + destination: + "/docs/computer-science/cpp-backend/easy-compile/1-cpp-libs", + statusCode: 301, + }, + { + source: "/docs/computer-science/cpp_backend/easy_compile/2_base_gcc", + destination: + "/docs/computer-science/cpp-backend/easy-compile/2-base-gcc", + statusCode: 301, + }, + { + source: "/docs/computer-science/cpp_backend/easy_compile/3_Make", + destination: "/docs/computer-science/cpp-backend/easy-compile/3-make", + statusCode: 301, + }, + { + source: "/docs/computer-science/cpp_backend/easy_compile/4_CMake", + destination: "/docs/computer-science/cpp-backend/easy-compile/4-cmake", + statusCode: 301, + }, + { + source: "/docs/computer-science/cpp_backend/easy_compile/5_vcpkg", + destination: "/docs/computer-science/cpp-backend/easy-compile/5-vcpkg", + statusCode: 301, + }, + ]; + }, async rewrites() { const backendUrl = process.env.BACKEND_URL ?? "http://localhost:8080"; return [