本文最后更新于:2023年12月5日 下午

Hexo 博客有时有着想要发布,但是不想过于公开的场景,本文记录隐藏 Hexo 博客的技术实现。

简介

之前我们介绍过 Hexo 文章加密,但有时对信息保护有不同的需求,比如需要某些信息可以访问,但又不公开让所有用户那么方便地访问,万一一不小心访问到了也没什么太大损失这种。

这种情况下基于知识的加密就比较合适了,也就是链接是有效的,但是不放在主页、Archive、Search 中,想要分享给别人直接发送链接别人就可以访问。

想要实现功能有几种方法:

  1. 修改 发布状态

  2. 存为草稿

  3. hexo-generator-indexed 插件

  4. hexo-hide-posts 插件

测试环境

为了测试文章隐藏功能,配置环境:

  1. 创建 Hexo 初始博客
  2. 创建 Foo、Bar、Test 三篇文章

后续以此为示例数据做测试。

修改发布状态

可以通过修改文章发布状态参数 published 来控制是否渲染该文章,如果设置为 False,则压根不会渲染,只是源文件保存在项目中。

  • 在文章 Markdown 文件 Front-Matter 部分配置 published 参数
1
2
# 设置 publishedfalse,则不会在网页中渲染
published: false

例如我们在 Foo 文章的 Front Matter 中添加上述配置:

1
2
3
4
5
6
---
title: Foo
date: 2023-06-15 12:04:20
published: false
tags:
---

渲染页面后没有 Foo 这篇文章了

直接访问 Foo 所在的链接也访问不到:

存为草稿

Hexo 自带草稿功能,草稿内容也不会发布,和 published 的区别我理解是概念上的,草稿是放在草稿箱中的文章,直接不算作 posts 的内容, publish 控制的是已经不是草稿的文章,已经属于文章范畴,功能其实是类似的。

草稿通过 Hexo 命令控制:

创建草稿:

1
hexo new draft <title>

示例:

1
2
3
$ hexo new draft VVDdraft
INFO Validating config
INFO Created: E:\test_hexo\TestHexo\source\_drafts\VVDdraft.md

VVDdraft.md 的内容不会在页面中展示。

以上两种方法并不完全实用,因为虽然隐藏了信息但是自己也看不到,插件可以解决一部分问题。

hexo-generator-indexed 插件

1
2
$ npm uninstall hexo-generator-index
$ npm install hexo-generator-indexed

隐藏文章 ,在文章的 Front-matter 中增加一个 hide 参数用来隐藏

还是以 Foo 为例

1
2
3
4
5
6
---
title: Foo
date: 2023-06-15 12:04:20
hide: true
tags:
---

设置完成后,讲道理在任何地方都不应该出现 Foo 的显示信息了,但是这个效果是因主题而异的。

landscape

  • 首页隐藏
  • archives 没有隐藏

fluid

  • 首页隐藏
  • 其余页面隐藏

hexo-generator-index-custom 插件

改插件可以完成类似hexo-generator-indexed 的博文隐藏功能,并且同时可以支持置顶,

相当于hexo-generator-indexedhexo-generator-index-pin-top 结合。

hexo-hide-posts 插件

hexo-generator-indexed 插件隐藏时过于彻底,为了更细粒度地进行隐藏,可以使用 hexo-hide-posts 插件

Github:https://github.com/prinsss/hexo-hide-posts

当一篇文章被设置为「隐藏」时,它不会出现在任何列表中(包括首页、存档、分类页面、标签页面、Feed、站点地图等),也不会被搜索引擎索引(前提是搜索引擎遵守 noindex 标签)。

只有知道文章链接的人才可以访问被隐藏的文章。

安装

1
$ npm install hexo-hide-posts --save

使用

在文章的 front-matter 中添加 hidden: true 即可隐藏文章。

比如我们隐藏了 source/_posts/lorem-ipsum.md 这篇文章:

1
2
3
4
5
6
7
---
title: 'Lorem Ipsum'
date: '2019/8/10 11:45:14'
hidden: true
---

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

虽然首页上被隐藏了,但你仍然可以通过 https://hexo.test/lorem-ipsum/ 链接访问它。(如果想要完全隐藏一篇文章,可以直接将其设置为草稿

你可以在命令行运行 hexo hidden:list 来获取当前所有的已隐藏文章列表。

插件也在 Local Variables 中添加了 all_postshidden_posts 变量,供自定义主题使用。

配置

在你的站点 _config.yml 中添加如下配置:

1
2
3
4
5
6
7
8
9
10
# hexo-hide-posts
hide_posts:
enable: true
# 可以改成其他你喜欢的名字
filter: hidden
# 指定你想要传递隐藏文章的 generator,比如让所有隐藏文章在存档页面可见
# 常见的 generators 有:index, tag, category, archive, sitemap, feed, etc.
public_generators: []
# 为隐藏的文章添加 noindex meta 标签,阻止搜索引擎收录
noindex: true

举个栗子:设置 filter: secret 之后,你就可以在 front-matter 中使用 secret: true 来隐藏文章了。

注意:不是所有插件注册的 generator 名称都与其插件名称相同。比如 hexo-generator-searchdb 插件,其注册的 generator 名称就是 xmljson,而非 searchdb。因此,在填写 public_generators 参数时要注意使用插件实际注册的 generator 名称(可以查阅对应插件的源码来获取准确的注册名)。

效果

改插件的效果也是不同主题不一样,在默认的 landscape 功能正常,在 fluid 则隐藏无效。

我的最佳实践

我的需求是,在博客发布一些私人的博文,不想完全公开,但是别人看到了也没大事。同时有相关知识的人可以方便地查看相关文章,不知道内情的人很难察觉有这些文章。

其实 hexo-hide-posts 功能很棒,但是可惜在 fluid 主题中隐藏内容失效,但是 hexo-generator-indexed 的隐藏功能是好的,因此我同时开启二者,达到隐藏博文的同时,将其在一个小角落展示出来的效果。

参考资料



文章链接:
https://www.zywvvd.com/notes/hexo/website/48-hexo-hide/hexo-hide/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

Hexo -48- 文章隐藏
https://www.zywvvd.com/notes/hexo/website/48-hexo-hide/hexo-hide/
作者
Yiwei Zhang
发布于
2023年6月15日
许可协议