Hexo Permalink简化

Hexo Permalink简化

在文档名有中文的时候,因为汉字会被转义,默认的永久链接会非常复杂,具体原因可以看这一篇文章

阮一峰 关于url编码

有两种方法优化。

方法一:自定义

首先,在scaffoldspost.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这个插件

  1. 安装

    npm install hexo-abbrlink --save
    
  2. 设置

    _config.yml文件中修改永久链接格式

    permalink: posts/:abbrlink.html
    abbrlink:
      alg: crc32  # 算法:crc16(default) and crc32
      rep: hex    # 进制:dec(default) and hex
    

    posts部分是可以更改的,也可以仿照方法一添加一个关键词便于识别

    permalink: :keywords/:abbrlink.html
    
  3. 生成

    在根目录创建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的样式,所以也没有了被改变的风险。

参考

  1. http://blog.jvaeyhcd.wang/posts/05c9df7e0c47bd64.html

你可能感兴趣的:(Hexo Permalink简化)