Hexo Permalink简化
在文档名有中文的时候,因为汉字会被转义,默认的永久链接会非常复杂,具体原因可以看这一篇文章
有两种方法优化。
方法一:自定义
首先,在scaffolds
的post.md
中,加入urlname
元素。
title: {{ title }}
urlname:
date: {{ date }}
tags:
categories:
然后,在配置文件_config.yml
中,将永久链接permalink
的形式改为
permalink: :category/:urlname/
也就是类别加上自定义的url链接。
每次写文章时,可以自己设计该页的url
,使得它变得简单,同时也利于区分。
但是,这种修改方法的链接会随着文件目录的改变而改变,
比如一篇文章HelloWorld.md
本来放在_posts
目录下,链接为https://xxx/_posts/HelloWorld.md
之后归类到_posts/A
目录下,那么链接变为https://xxx/_posts/A/HelloWorld.md
这样不太利于分享,所以推荐使用第二种方法。
方法二:插件
使用hexo-abbrlink
这个插件
-
安装
npm install hexo-abbrlink --save
-
设置
在
_config.yml
文件中修改永久链接格式permalink: posts/:abbrlink.html abbrlink: alg: crc32 # 算法:crc16(default) and crc32 rep: hex # 进制:dec(default) and hex
posts
部分是可以更改的,也可以仿照方法一添加一个关键词便于识别permalink: :keywords/:abbrlink.html
-
生成
在根目录创建
Gruntfile.js
文件,让插件到source/_posts/
下读取所有的.md文件,把文件中的@@abbrlink替换成文件内容的hash值。module.exports = function(grunt) { grunt.initConfig({ rewrite: { abbrlink: { src: 'source/_posts/**/*.md', editor: function(contents, filepath){ const crypto = require('crypto'); const hash = crypto.createHash('sha256'); hash.update(contents); var hashValue = hash.digest('hex'); return contents.replace(/@@abbrlink/g, hashValue.substring(0, 16)); } }, }, }); grunt.loadNpmTasks('grunt-rewrite'); };
这种方法生成的链接是不带目录的,直接就是第二步设置中permalink
的样式,所以也没有了被改变的风险。
参考