Hexo 博客有时有着想要发布,但是不想过于公开的场景,本文记录隐藏 Hexo 博客的技术实现。
之前我们介绍过 Hexo 文章加密,但有时对信息保护有不同的需求,比如需要某些信息可以访问,但又不公开让所有用户那么方便地访问,万一一不小心访问到了也没什么太大损失这种。
这种情况下基于知识的加密就比较合适了,也就是链接是有效的,但是不放在主页、Archive、Search 中,想要分享给别人直接发送链接别人就可以访问。
想要实现功能有几种方法:
发布状态
存为草稿
hexo-generator-indexed
插件
hexo-hide-posts
插件
为了测试文章隐藏功能,配置环境:
后续以此为示例数据做测试。
可以通过修改文章发布状态参数 published
来控制是否渲染该文章,如果设置为 False,则压根不会渲染,只是源文件保存在项目中。
Front-Matter
部分配置 published
参数12 | # 设置 published 为 false,则不会在网页中渲染published: false |
---|
例如我们在 Foo 文章的 Front Matter 中添加上述配置:
123456 | ---title: Foodate: 2023-06-15 12:04:20published: falsetags:--- |
---|
渲染页面后没有 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
插件12 | $ 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 的显示信息了,但是这个效果是因主题而异的。
hexo-generator-index-custom
插件改插件可以完成类似hexo-generator-indexed
的博文隐藏功能,并且同时可以支持置顶,
相当于hexo-generator-indexed
和 hexo-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
这篇文章:
1234567 | ---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_posts
和 hidden_posts
变量,供自定义主题使用。
在你的站点 _config.yml
中添加如下配置:
12345678910 | # hexo-hide-postshide_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 名称就是 xml
和 json
,而非 searchdb
。因此,在填写 public_generators
参数时要注意使用插件实际注册的 generator 名称(可以查阅对应插件的源码来获取准确的注册名)。
改插件的效果也是不同主题不一样,在默认的 landscape 功能正常,在 fluid 则隐藏无效。
我的需求是,在博客发布一些私人的博文,不想完全公开,但是别人看到了也没大事。同时有相关知识的人可以方便地查看相关文章,不知道内情的人很难察觉有这些文章。
其实 hexo-hide-posts
功能很棒,但是可惜在 fluid 主题中隐藏内容失效,但是 hexo-generator-indexed
的隐藏功能是好的,因此我同时开启二者,达到隐藏博文的同时,将其在一个小角落展示出来的效果。