菜单

URL 管理和输出格式

相关源文件

本文档介绍了 Hugo 如何管理 URL 并从相同内容生成多种输出格式。这两个系统协同工作,决定内容的发布位置和格式。有关内容组织的更多信息,请参阅 页面管理

概述

Hugo 的 URL 管理系统负责 URL 的创建、清理和解析,而输出格式系统则能够从单个源生成多种格式的内容(HTML、JSON、RSS 等)。它们共同决定

  1. 您网站的 URL 结构
  2. 内容的写入文件路径
  3. 用于渲染内容的模板
  4. 如何为不同内容类型生成永久链接

URL 管理系统

Hugo 提供了多种机制来生成、清理和操作 URL。

URL 生成流程

来源:helpers/url.go30-50 helpers/url.go53-92 helpers/url.go116-174

URL 配置级别

Hugo 中的 URL 可在多个级别进行配置,更具体的设置将覆盖更一般的设置。

复杂度配置示例
全局config.toml: baseURL, uglyURLsbaseURL = "https://example.com/"
章节config.toml: [permalinks][permalinks]
posts = "/:year/:month/:slug/"
页面Front matter: url, slugurl: "/custom/path/"

URL 函数

Hugo 的 URL 系统提供了一些重要的函数

  1. URLize: 创建一个对 URL 友好的字符串(将空格替换为连字符,处理 Unicode)
  2. AbsURL: 生成包含域名的绝对 URL
  3. RelURL: 生成相对于站点根目录的 URL

美化 URL 与丑陋 URL

Hugo 支持两种 URL 格式

  1. 美化 URL: /section/page/ (默认)
  2. 丑陋 URL: /section/page.html

这可以全局或按分区进行配置

来源:hugolib/site_url_test.go26-65

输出格式系统

Hugo 可以从相同的源内容生成多种输出格式。每种格式都有自己的文件扩展名、URL 路径和模板。

输出格式架构

来源:output/outputFormat.go27-83 media/mediaType.go36-58

内置输出格式

Hugo 提供了一些内置的输出格式

姓名媒体类型描述文件扩展名
HTMLtext/html标准 HTML.html
AMPtext/html加速移动页面.html
RSSapplication/rss+xmlRSS feed.xml
JSONapplication/jsonJSON 数据.json
CSVtext/csvCSV 数据.csv
日历text/calendariCalendar 格式.ics
站点地图application/xmlXML sitemap.xml
RobotsTXTtext/plainRobots.txt 文件.txt

来源:output/outputFormat.go86-220

输出格式配置

输出格式可以在站点和页面级别进行配置

按类型划分的默认输出格式

每种页面类型都有默认的输出格式

类型默认输出格式
homeHTML, RSS
pageHTML
sectionHTML, RSS
taxonomyHTML, RSS
termHTML, RSS
sitemap站点地图
robotsRobotsTXT
404HTML

来源:hugolib/site_output.go25-55 hugolib/site_output.go57-109

URL 和输出格式集成

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 (加速移动页面)

AMP 页面通常与常规 HTML 页面并存,但路径不同

这会生成

  • 常规页面: /blog/my-post/
  • AMP 页面: /amp/blog/my-post/

两个页面包含相同的内容,但 AMP 版本遵循 AMP 规范。

来源:output/outputFormat.go87-96

Sitemaps

Hugo 可以为搜索引擎生成 XML 站点地图

对于多语言网站,Hugo 会生成一个根站点地图索引和特定语言的站点地图。

来源:hugolib/sitemap_test.go24-227

RSS Feeds

RSS feeds are generated automatically for home pages and sections

This creates RSS feeds at /feed.xml instead of the default /index.xml.

来源:hugolib/rss_test.go24-146

RobotsTXT

robots.txt 文件在站点根目录生成

来源:hugolib/robotstxt_test.go27-54

多语言 URL 管理

对于多语言网站,Hugo 可以在 URL 中添加语言前缀

这会生成

  • 英文内容:/en/section/page/
  • 法文内容:/fr/section/page/

AbsURLRelURL 函数会自动处理语言前缀。

来源: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 管理和输出格式系统提供了强大的内容发布能力

  1. 灵活的 URL 结构:可在站点、分区或页面级别配置 URL
  2. 多种输出格式:从相同内容生成 HTML、JSON、RSS 等格式
  3. 自定义路径:为不同输出格式定义自定义路径
  4. 特殊格式:内置支持站点地图、RSS feed、AMP 页面等

这些系统协同工作,让您能够精确控制内容的发布和访问方式。