URL

使用 url 变量为页面设置自定义 URL。

正如在 页面文件 中解释的那样,输出文件名是使用原始源文件路径生成的:

posts/my-first-post.md  =>  /posts/my-first-post/index.html

默认情况下,页面以“美化 URL (pretty URLs)” 的形式保存,使用目录作为路径,并使用 index.html 文件。 因此,最终的 URL 是 /posts/my-first-post/。 要禁用此行为,请在你的 _config.js 文件中将选项 prettyUrls 设置为 false (请参阅 配置)。

const site = lume({
  prettyUrls: false,
});
/posts/my-first-post.md  =>  /posts/my-first-post.html

url 变量

在页面中定义的变量 url 允许单独自定义输出文件。 例如:

---
title: My first post
url: /posts/welcome/
---

在此示例中,url 值更改了输出文件名:

/posts/my-first-post.md  =>  /posts/welcome/index.html

请注意,手动定义页面的 URL 意味着 prettyUrls 选项 将不起任何作用。 例如:

# 使用尾部的 / 来创建美化 URL (pretty urls)。
# 例如,这将输出 /posts/welcome/index.html
url: /posts/welcome/

# 这将输出 /posts/welcome (一个没有扩展名的文件)
url: /posts/welcome

# 这将输出 /posts/welcome.html
url: /posts/welcome.html

相对 URL

如果你只想更改 URL 的最后一部分,则可以使用相对路径。 例如:

---
title: My first post
url: ./welcome/
---

在此示例中,页面将使用源文件保存的目录路径来保存,但在 URL 的最后一部分添加 welcome

/posts/my-first-post.md  =>  /posts/welcome/index.html

使用 ../welcome/ 作为 URL 也将删除最后一个目录。

/posts/my-first-post.md  =>  /welcome/index.html

作为函数的 URL

变量 url 也接受一个函数来动态生成最终值。 此函数将当前页面对象作为第一个参数。

例如,假设我们想要使用标题值自动生成我们所有文章的 URL。 我们可以在 /posts/ 目录中创建一个 _data.js 文件,其中包含以下代码:

export function url(page) {
  return `./${page.data.title}/`;
}

现在,此目录中的所有页面都共享相同的 url 函数。 该函数返回页面的标题作为相对 URL,例如,./My first post/ (请参阅 共享数据)。

由于 URL 是相对的,因此当前目录会自动附加 (它将被解析为 /post/My first post/)。 并且,如果你正在使用 slugify_urls 插件,则所有输出路径都会自动 slugify,因此最终的 URL 将是 /post/my-first-post/

使用函数作为 URL 可以非常灵活地生成你想要的 URL。

将 url 设置为 false

url 变量设置为 false 会阻止 Lume 处理该页面。

---
title: This is a title
url: false # 暂时忽略此页面
---

Basename (基本名称)

从 Lume v2 开始,引入了新的变量 basename 以更好地自定义 URL 生成。 这是一个特殊的值,会影响定义它的页面或目录,并允许更改文件名/目录名在最终 URL 中的反映方式。

如果在 _data.* 文件中定义了 basename,它将影响 _data 文件所在的目录。 例如,假设我们有以下文件:

/blog/posts/hello-world.md

此文件导出的 URL 为 /blog/posts/hello-world/。 如果我们想将 /posts/ 部分替换为 /articles/,我们可以在 /blog/posts 文件夹中创建一个 _data.yml 文件,其中包含以下代码:

basename: articles

现在,此文件夹将在 URL 生成中使用名称 articles,因此该文件的最终 URL 是 /blog/articles/hello-world/

你可以将 basename 变量设置为空以不在最终 URL 中使用文件夹名称:

basename: ""

该文件的最终 URL 现在是 /blog/hello-world//post/ 部分已被删除。 你也可以使用以下方法删除上一个文件夹:

basename: "../"

该文件的最终 URL 现在是 /hello-world/