hexo 自定义文章 url 地址

本文最后更新于:2021年6月15日 晚上

笔者初次通过 hexo 搭建博客时,对 hexo 不太了解,后来发现中文标题的文章 URL 会转义成http://nullpointer.pw/2018/09/17/%E5%92%8C%E6%88%91%E4%B8%80%E8%B5%B7%E6%89%93%E9%80%A0%E4%B8%AA%E7%AE%80%E5%8D%95%E6%90%9C%E7%B4%A2%E4%B9%8BSpringDataElasticSearch%E5%85%B3%E9%94%AE%E8%AF%8D%E9%AB%98%E4%BA%AE.html 类似模样,,,当标题比较长时,URL 就会很长,hexo 默认的 URL 是:year/:month/:title,为了减小 URL 长度,于是笔者做了一件比较傻缺的事情,将 URL 修改成了只有标题,这也造成如今 repo 列表文件过多,同时也并未解决中文标题转义的问题,因此需要自定义文章 URL。

自定义文章 URL

先说说中文转义 URL 的方式,首先需要修改 hexo 根目录下的_config.yml 文件,

1
2
3
4
#permalink: :year/:month/:title/
permalink: :year/:month/:urlname.html
permalink_defaults:
urlname: index

将原永久链接 permalink 中的*:title* 替换为为 urlname.html ,同时在 permalink_defaults 增加 urlname 属性,这样就可以通过在文章内容的 Formatter 配置文章的 URL 链接地址,笔者之前修改过一次永久链接格式,只保留了标题即:permalink: :title.html,现在修改为了 permalink: :urlname.html ,本文文章配置如下图,

本文最终的 URL 地址就是:http://nullpointer.pw/hexo-custom-article-url.html

修改文章模板

修改 post.md

1
2
3
4
5
6
7
8
9
---
title: {{ title }}
date: {{ date }}
urlname:
tags:
- 1
categories:
- 2
---

这样通过命令 hexo new xxxxxx命令新建的博客文章中就自动带有这个属性。

兼容旧文章 URL

因为旧的文章可能已经被搜索引擎收录,如果直接粗暴修改就会造成收录的结果出现 404 的情况,还有阅读数统计一般也是根据文章 URL 来做的,笔者之前也有过因为修改文章 URL 造成所有文章阅读数归零的遭遇。

总之,这显然不是我们想要看到的情况;

所以为了保持旧的文章 URL 不变,需要对所有旧文章同样增加这个 urlname 属性,属性的值设置为当前文章的文件名即可。比如 http://nullpointer.pw/和我一起打造个简单搜索之 SpringDataElasticSearch 关键词高亮.html这篇文章为了不改变原 URL 地址,在 md 文件中修改为:

1
2
3
4
5
6
7
8
9
10
11
---
title: 和我一起打造个简单搜索之 SpringDataElasticSearch 关键词高亮
tags:
- SpringDataElasticSearch 高亮
- SpringDataElasticSearch 关键词高亮
- ElasticsearchTemplate 使用
categories:
- ElasticSearch
date: 2018-09-17 21:27:03
urlname: 和我一起打造个简单搜索之 SpringDataElasticSearch 关键词高亮
---

笔者改了好一会儿才改完所有文章,还好文章不是很多。文章特别多的博主,恐怕只能写个脚本批量修改了。

后记

可以自定义文章 URL 的好处多多,第一个是减小 URL 长度,便于搜索引擎收录,也方便自己在其他地方直接引用,不会出现类似一串乱码 URL 的尴尬情况;

另外由于文章 URL 与文章标题关系不是特别紧密,不会造成修改标题导致 URL 改变的窘况,可以后期修改不适当的标题。

好处多多,希望对你有用~

参考