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 [