路由模型

给定一个内容根目录:

docs/site/
  README.md
  guides/
    README.md
    getting-started.md

mdorigin 按如下方式解析路由:

如果某个目录没有 index.md,当前运行时仍可渲染一个最小化的兜底列表用于浏览。

目录首页以带尾斜杠的形式为规范地址。当 /guides/ 是有效目录路由时,请求 /guides 会重定向到 /guides/

内容树还可以包含目录符号链接。mdorigin 在本地预览与构建期处理中会跟随它们,同时保持发布 URL 基于内容根内部可见路径。

/sitemap.xml 输出规范 HTML URL,而不是 .md 源码 URL。它要求配置 siteUrl,站点地图才能使用绝对地址。

/feed.xml 同样要求 siteUrl,因为订阅条目使用绝对规范 URL。

渲染出的 HTML 还会暴露源 markdown 路径:

<link rel="alternate" type="text/markdown" href="/foo.md">

这是一个轻量的互操作提示,方便希望从人类 HTML 页面发现原始 markdown 源码的智能体与工具。

对于缺失的路由,mdorigin 为人类 HTML 请求渲染 HTML 404 页,而 markdown、资源与 API 的未命中保持对机器友好的纯文本。

启用 RSS 后,渲染出的 HTML 还会暴露订阅自动发现:

<link rel="alternate" type="application/rss+xml" href="https://example.com/feed.xml">

规范 markdown 路径

目录首页支持 index.mdREADME.mdSKILL.md,但对给定目录只有一个能作为实际源文件生效。

这让原始 markdown URL 保持规范,同时允许目录使用任一文件名。

技能包支持

技能仓库通常使用:

mdorigin 在某目录看到 SKILL.md 时,默认把该目录当作一个文档包(document bundle)。

Accept 协商

显式路径保持稳定:

无扩展名路由可以基于 Accept 协商:

当请求包含 Accept: text/markdown 时,这些路由返回原始 markdown 而不是 HTML。

对参与协商的路由,响应包含:

示例:

curl -H "Accept: text/markdown" http://localhost:3000/guides/getting-started

别名

文档可以在 frontmatter 中用 aliases 声明旧路径。

当请求命中某个别名时,mdorigin 返回 308 重定向到当前规范 HTML 路由:

示例:

---
aliases:
  - /old-guides
  - /legacy/getting-started
---

多语言路由

配置 locales 后,非默认语言的内容放在以语言代码命名的顶层目录中,URL 带对应前缀:

docs/site/
  README.md          # 默认语言(免前缀)
  guides/
  zh-CN/             # /zh-CN/
    README.md
    guides/