本文档介绍了 Hugo 如何管理 URL 并从相同内容生成多种输出格式。这两个系统协同工作,决定内容的发布位置和格式。有关内容组织的更多信息,请参阅 页面管理。
Hugo 的 URL 管理系统负责 URL 的创建、清理和解析,而输出格式系统则能够从单个源生成多种格式的内容(HTML、JSON、RSS 等)。它们共同决定
Hugo 提供了多种机制来生成、清理和操作 URL。
来源:helpers/url.go30-50 helpers/url.go53-92 helpers/url.go116-174
Hugo 中的 URL 可在多个级别进行配置,更具体的设置将覆盖更一般的设置。
| 复杂度 | 配置 | 示例 |
|---|---|---|
| 全局 | config.toml: baseURL, uglyURLs | baseURL = "https://example.com/" |
| 章节 | config.toml: [permalinks] | [permalinks]posts = "/:year/:month/:slug/" |
| 页面 | Front matter: url, slug | url: "/custom/path/" |
Hugo 的 URL 系统提供了一些重要的函数
Hugo 支持两种 URL 格式
/section/page/ (默认)/section/page.html这可以全局或按分区进行配置
来源:hugolib/site_url_test.go26-65
Hugo 可以从相同的源内容生成多种输出格式。每种格式都有自己的文件扩展名、URL 路径和模板。
来源:output/outputFormat.go27-83 media/mediaType.go36-58
Hugo 提供了一些内置的输出格式
| 姓名 | 媒体类型 | 描述 | 文件扩展名 |
|---|---|---|---|
| HTML | text/html | 标准 HTML | .html |
| AMP | text/html | 加速移动页面 | .html |
| RSS | application/rss+xml | RSS feed | .xml |
| JSON | application/json | JSON 数据 | .json |
| CSV | text/csv | CSV 数据 | .csv |
| 日历 | text/calendar | iCalendar 格式 | .ics |
| 站点地图 | application/xml | XML sitemap | .xml |
| RobotsTXT | text/plain | Robots.txt 文件 | .txt |
来源:output/outputFormat.go86-220
输出格式可以在站点和页面级别进行配置
每种页面类型都有默认的输出格式
| 类型 | 默认输出格式 |
|---|---|
| home | HTML, RSS |
| page | HTML |
| section | HTML, RSS |
| taxonomy | HTML, RSS |
| term | HTML, RSS |
| sitemap | 站点地图 |
| robots | RobotsTXT |
| 404 | HTML |
来源:hugolib/site_output.go25-55 hugolib/site_output.go57-109
URL 管理和输出格式系统协同工作,以确定最终的 URL 和文件路径。
对于具有 HTML 和 JSON 输出格式的页面
# Content file: content/blog/my-post.md
# Output formats: HTML, JSON
# URLs generated:
- HTML: /blog/my-post/
- JSON: /blog/my-post/index.json
# Files created:
- public/blog/my-post/index.html
- public/blog/my-post/index.json
如果 JSON 格式有自定义路径
来源:hugolib/site_output_test.go31-218
永久链接受 URL 配置和输出格式的影响。
某些输出格式被指定为“可设置永久链接”,这意味着它们控制页面 .Permalink 和 .RelPermalink 的值。
默认情况下,HTML 是可设置永久链接的,因此 .Permalink 将指向页面的 HTML 版本。像 AMP 这样的输出格式也可以配置为可设置永久链接。
来源:output/outputFormat.go73-79 hugolib/site_output_test.go461-605
AMP 页面通常与常规 HTML 页面并存,但路径不同
这会生成
/blog/my-post//amp/blog/my-post/两个页面包含相同的内容,但 AMP 版本遵循 AMP 规范。
来源:output/outputFormat.go87-96
Hugo 可以为搜索引擎生成 XML 站点地图
对于多语言网站,Hugo 会生成一个根站点地图索引和特定语言的站点地图。
来源:hugolib/sitemap_test.go24-227
RSS feeds are generated automatically for home pages and sections
This creates RSS feeds at /feed.xml instead of the default /index.xml.
robots.txt 文件在站点根目录生成
来源:hugolib/robotstxt_test.go27-54
对于多语言网站,Hugo 可以在 URL 中添加语言前缀
这会生成
/en/section/page//fr/section/page/AbsURL 和 RelURL 函数会自动处理语言前缀。
来源:helpers/url_test.go152-266 hugolib/site_url_test.go85-119
您可以为特殊需求定义自定义输出格式
每种输出格式都需要
来源:hugolib/site_output_test.go220-257 hugolib/site_output_test.go441-459
Hugo 的 URL 管理和输出格式系统提供了强大的内容发布能力
这些系统协同工作,让您能够精确控制内容的发布和访问方式。