Hexo 博客有时有着想要发布,但是不想过于公开的场景,本文记录隐藏 Hexo 博客的技术实现。
简介 {#简介}
之前我们介绍过 Hexo 文章加密,但有时对信息保护有不同的需求,比如需要某些信息可以访问,但又不公开让所有用户那么方便地访问,万一一不小心访问到了也没什么太大损失这种。
这种情况下基于知识的加密就比较合适了,也就是链接是有效的,但是不放在主页、Archive、Search 中,想要分享给别人直接发送链接别人就可以访问。
想要实现功能有几种方法:
-
修改
发布状态
-
存为草稿
-
hexo-generator-indexed
插件 -
hexo-hide-posts
插件
测试环境 {#测试环境}
为了测试文章隐藏功能,配置环境:
- 创建 Hexo 初始博客
- 创建 Foo、Bar、Test 三篇文章
后续以此为示例数据做测试。
修改发布状态 {#修改发布状态}
可以通过修改文章发布状态参数 published
来控制是否渲染该文章,如果设置为 False,则压根不会渲染,只是源文件保存在项目中。
- 在文章 Markdown 文件
Front-Matter
部分配置published
参数
例如我们在 Foo 文章的 Front Matter 中添加上述配置:
渲染页面后没有 Foo 这篇文章了
直接访问 Foo 所在的链接也访问不到:
存为草稿 {#存为草稿}
Hexo 自带草稿功能,草稿内容也不会发布,和 published 的区别我理解是概念上的,草稿是放在草稿箱中的文章,直接不算作 posts 的内容, publish 控制的是已经不是草稿的文章,已经属于文章范畴,功能其实是类似的。
草稿通过 Hexo 命令控制:
创建草稿:
示例:
VVDdraft.md
的内容不会在页面中展示。
以上两种方法并不完全实用,因为虽然隐藏了信息但是自己也看不到,插件可以解决一部分问题。
hexo-generator-indexed
插件 {#hexo-generator-indexed-插件}
隐藏文章 ,在文章的 Front-matter 中增加一个 hide 参数用来隐藏
还是以 Foo 为例
设置完成后,讲道理在任何地方都不应该出现 Foo 的显示信息了,但是这个效果是因主题而异的。
landscape {#landscape}
- 首页隐藏
- archives 没有隐藏
fluid {#fluid}
- 首页隐藏
- 其余页面隐藏
hexo-generator-index-custom
插件 {#hexo-generator-index-custom-插件}
改插件可以完成类似hexo-generator-indexed
的博文隐藏功能,并且同时可以支持置顶,
相当于hexo-generator-indexed
和 hexo-generator-index-pin-top
结合。
hexo-hide-posts
插件 {#hexo-hide-posts-插件}
hexo-generator-indexed
插件隐藏时过于彻底,为了更细粒度地进行隐藏,可以使用 hexo-hide-posts
插件
Github:https://github.com/prinsss/hexo-hide-posts
当一篇文章被设置为「隐藏」时,它不会出现在任何列表中(包括首页、存档、分类页面、标签页面、Feed、站点地图等),也不会被搜索引擎索引(前提是搜索引擎遵守 noindex 标签)。
只有知道文章链接的人才可以访问被隐藏的文章。
安装 {#安装}
使用 {#使用}
在文章的 front-matter 中添加 hidden: true
即可隐藏文章。
比如我们隐藏了 source/_posts/lorem-ipsum.md
这篇文章:
虽然首页上被隐藏了,但你仍然可以通过 https://hexo.test/lorem-ipsum/
链接访问它。(如果想要完全隐藏一篇文章,可以直接将其设置为草稿)
你可以在命令行运行 hexo hidden:list
来获取当前所有的已隐藏文章列表。
插件也在 Local Variables 中添加了 all_posts
和 hidden_posts
变量,供自定义主题使用。
配置 {#配置}
在你的站点 _config.yml
中添加如下配置:
举个栗子:设置 filter: secret
之后,你就可以在 front-matter 中使用 secret: true
来隐藏文章了。
注意 :不是所有插件注册的 generator 名称都与其插件名称相同。比如 hexo-generator-searchdb
插件,其注册的 generator 名称就是 xml
和 json
,而非 searchdb
。因此,在填写 public_generators
参数时要注意使用插件实际注册的 generator 名称(可以查阅对应插件的源码来获取准确的注册名)。
效果 {#效果}
改插件的效果也是不同主题不一样,在默认的 landscape 功能正常,在 fluid 则隐藏无效。
我的最佳实践 {#我的最佳实践}
我的需求是,在博客发布一些私人的博文,不想完全公开,但是别人看到了也没大事。同时有相关知识的人可以方便地查看相关文章,不知道内情的人很难察觉有这些文章。
其实 hexo-hide-posts
功能很棒,但是可惜在 fluid 主题中隐藏内容失效,但是 hexo-generator-indexed
的隐藏功能是好的,因此我同时开启二者,达到隐藏博文的同时,将其在一个小角落展示出来的效果。
参考资料 {#参考资料}
- https://blog.ccknbc.cc/posts/how-to-hide-hexo-articles-gracefully/
- https://blog.garryde.com/archives/37712.html
- https://github.com/prinsss/hexo-hide-posts
文章链接:
https://www.zywvvd.com/notes/hexo/website/48-hexo-hide/hexo-hide/