hugo slug标签使用
一、前因
博客上面的URL是中文(我用的dream主题),复制分享给别人就成一串乱码了,不免让人瑟瑟发抖,避之不及。
那就给它打扮一番,脱下类病毒外套。
二、教程
添加slug属性
hugo提供了slug属性为每篇博客添加自定义标题。
用法在头部添加。
slug 后面就是你要在网页显示的标题,具体取啥名见仁见智。
现在你需要为每个文章都添加,开始干吧。
修改默认生成
hugo每次新建文章都会按照archetypes/posts.md的模板来新建。
因此,不想每次新建文章都手打slug,可以在archetypes/posts.md中新增slug标签。
建议不要用主题文件夹里面的,拷贝出来放在自己项目中,实现无侵入修改。
匹配原有地址
加了slag后地址已然变成新的了,可若原先有人钟情你的内容将网址保存或者收藏了呢?
打开后没有内容,去到404页面,岂不是人在家中坐,骂从天空来。
因此需要将原有URL跳转到现有URL。
hugo 提供了aliases属性实现页面重定向。
用法也是在头部添加aliases属性
测试一下,访问老页面就会跳转到新页面了。
三、优化
可能你也以为aliases就是把title复制进来就可以了。
年轻,还是太年轻,标题的空格hugo默认给转成“-”了。
老老实实去浏览器一个一个页面点击复制标题吧。
文章多的,独独框选中文可太费眼费神费力了,高手选择地址栏ctrl+a | ctrl+c ,最后用 vscode 全局替换掉域名。
可是复制出来的中文是乱码,贴个乱码在aliases中,重定向压根不甩你。
最后为了一个转码,学了一天代码,颇有捡到块砖头,硬是去把盖房给学会了的霸气。
代码如下:用的 go 语言的 colly 框架。
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
"net/url"
"strings"
)
func main() {
// blog 改成你自己的博客地址,hugo搭建的基本可用
var blog = "https://blog.freecrazy.cn/"
var href []string
c := colly.NewCollector()
//查找页面a元素 ul>li>a
c.OnHTML("ul>li>a", func(e *colly.HTMLElement) {
//fmt.Println(e.DOM.Attr("href"))
if r, exists := e.DOM.Attr("href"); exists {
href = append(href, r)
}
})
//访问地址
c.Visit(blog + "posts")
//乱码转换
for _, s := range href {
unescape, _ := url.QueryUnescape(s)
replace := strings.Replace(unescape, blog, "/", -1)
fmt.Println(replace)
}
}
至于后面要不要加进入文件,为指定一行插入代码的逻辑,我就不去薅头发了,毕竟我标题有空格的文章屈指可数。
不懂代码的,老老实实复制粘贴好了,无他法。
还没完呢。
想想,要是某一天你编了个故事,slug取名story。
第二个某一天,你又编了个故事,slug也给取名story。
那这两篇的地址岂不都是 posts/story/
吗?
无聊的你可以试下会发生什么状况,记得告诉我。
为了杜绝这种情况,可以在总配置文件 config.toml
中添加如下标签:
就不给复制,懒得你。
然后你的页面标题就会自动增加年月。
日就不用加了,一天也写不了几篇。
四、总结
收工。