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/
。