本文将帮助你使用文章id和category_map实现URL路径全英文。第一节可跳过不看。重点在二、三小节。
1. 为什么使用英文网址?
一般来说,URL只能使用英文和数字和一些标点符号表示。这是因为网络标准RFC 1738 做了硬性规定。
虽然在Hexo中引用:title
可以显示中文的网址,但是复制粘贴到记事本会发现得到的是一大串百分号之类的“乱码”(其实这并不是乱码,而是中文被转码成十六进制编码的结果),看起来不怎么好看:
因此下面我们通过一种简单的方式使发布的文章的网址变得简洁:
如图所示我只用了十位数字作为文章的唯一标识,你也可以自定义此数字:
2. 在permalink中使用文章id替代“:title”
在官方文档永久链接(Permalinks) | Hexo一章中有这样一段描述:
permalink
的变量就这几个,其中文章id
这个变量非常有用。
我们可以在博客根目录的配置文件(_config.yml
)中这样修改:
#permalink: :year/:month/:day/:title # 这是原配置
permalink: :year/:id/ # 替换为此新配置
并且在.\scaffolds\post.md
中修改为:
(注意新增了一个id:
)
---
title: {{ title }}
id:
date: {{ date }}
updated: {{ date }}
categories:
tags:
permalink:
---
在我们的具体文章中,你可以使用任意字符串作为此文章的id,例如:
---
title: 如何让你的Hexo博客网址使用全英文路径
id: 123456789-abcd
date: 2017-12-30 20:57:46
updated: 2017-12-30
categories: 后台01 文档管理
tags:
permalink:
---
不过为了命名规范(同时也是为了方便记忆),我的做法是使用创建日期中的月+日+时+分+秒
来定义一个id,比如此篇文章我使用1230-205746
作为id。
3. 使用category_map实现分组映射
有同学也注意到了,官方文档中还提到permalink可以使用:category
变量,比如我们想要这样定义永久链接:
修改博客配置文件_config.yml
:
permalink: :year/:category/:id/
...
# Category & Tag
default_category: uncatalog
## 为了让中文分组名在网址中显示为英文,我们可以创建分组名映射(category_map):
category_map:
Adobe脚本语言学习: adobe-extendscript
Android基础: android-base
Android案例实现: android-training
Hexo: hexo
LK字幕脚本开发: lk-ae-subtitlescript
从零开发Anykey: passport-pandora
统计: statistics
未分类: uncatalog
文档管理: doc-manage
正则表达式: regex
正则表达式学习: regex
字幕组: fansub
tag_map:
同理tag_map
可以实现标签的中英文转换。
特别注意
Hexo permalink似乎有一个bug,如果id设为纯数字(比如1230205746
),那么有一定几率出现网址中的id与设置的不符的问题。
具体原因还不清楚,因此建议强烈建议不要使用纯数字作为id。