本文章最初发表在XJHui’s Blog,未经允许,任何人禁止转载!
为使您获得最好的阅读体验,强烈建议您点击 这里 前往 XJHui’s Blog 查看!
前言
本教程仅适用于部署在Zeit.co的个人网站。
我的博客使用的是Hexo框架
+Butterfly主题
+GitHub仓库
+Zeit.co部署
+又拍云CDN
(这不是在打广告,很认真的在写博客),主题配置文件中有404页面的具体设置:
这样配置能渲染出404页面:
但当你真正404时:
配置好404后也没有测试过,一直以为我的404页面是正常的…
踩坑经历
这里记录踩坑经历,想跳过的可以直接传送到 这里 。
-
创建
now.json
文件:1
2
3
4
5
6
7{
"version": 2,
"routes": [
{ "handle": "filesystem" },
{ "src": "/(.*)", "status": 404, "dest": "/404.html" }
]
}并把它放到
根目录
(我当时认为是Hexo的根目录
),hexo g
后自动在/public
下生成now.json
文件:于是我兴奋的
hexo d
后发现提交至Zeit.co仓库
失败了:英文看不懂?就是说生成的
json文件
不符合规范(存在语法错误
),仔细看上图会发现json文件
中包含了JavaScript,至于为什么会这样至今我也不知道,如果您知道原因欢迎到评论区
留言(失败)。 于时更换了
now.json
文件位置,把他放在了主题
的根目录,结果发现hexo g后在/public文件夹下未生成now.json文件(失败)。既然无法生成,那我就直接到GitHub仓库,创建
now.json
文件并把上面的代码
沾了进去,再次提交竟然成功了,这才明白原来Yavin说的根目录
是指仓库根目录
,但这样做存在的问题是下次hexo d
后now.json
文件会直接被删掉(失败)。我知道
hexo d
其实就是把/public
中的文件上传到仓库。想把json文件放到仓库根目录其实就是先放到/public中,于时开始想哪里的文件hexo g
后能直接生成在/public
中,看了一眼仓库中的文件: 有点熟悉呀,这三个文件夹不就是
主题根目录/source
(不是hexo根目录下的/source)中的三个文件夹?: 于时我很开心的把
now.json
文件放进了/source
中 哈哈,测试没问题,终于解决了。
解决404页面无法显示
本博客提供的方法仅在Hexo博客框架下Butterfly主题测试,其余框架或主题可自行尝试。
若您的主题使用了页面压缩(gulp…),需要先排除掉
conf.json
这个文件。
在主题根目录/source下新建now.json文件,粘贴下面的代码:
1 | { |
注:该json文件会调用404.html,所以要保证仓库根目录有404.html文件,当然也可以写成其他文件(也为下面自定义404页面
创造可能)。
感谢:Yavin
自定义404页面
主题
404页面
可配置项不多(仅支持修改背景图片
),但你可以按照本教程让你的博客拥有喜欢的404页面
当然你可以去修改
404的pug
文件,但我实在是不想动源代码
(主要是怕博客报错
,然后gg)
先上gif,看看我的404页面:
404页面代码来自CodePen,感谢!
其实很简单,大致思路是新建page页面
-> 禁止渲染
该页面 -> 修改json.now
文件。
新建page页面
怎么创建应该都会吧,这里以404为例:
1 | hexo new page 404 |
别担心这个404
会渲染出404.html
然后与原有的404.html
冲突,因为page页渲染出来的是/404/index.html
创建后的文件:
禁止渲染
为什么要禁止渲染?如果不禁止会像其他页面那样被加上顶部图、页脚…
主要有两种方法,想具体学习的可以看这篇文章,本篇教程指介绍一种我认为简单的:
index.md中添加:
1
layout: false
插入html代码时,使用标签:
1
2
3
4
5{% raw %}
...
html
...
{% endraw %}
例如:
如果喜欢我的404页面,可以使用下面的代码(太长了,使用PasteMe平台):
点击查看代码,点击该位置可以直接复制
哦:
说起PasteMe,又让我想起来iamzxf,还是很感谢他…
修改now.json
文件
来到了最后一步,离成功又近了一步。
将原now.json
文件中的:
1 | "dest": "/404.html" |
修改为:
1 | "dest": "/404/" |
至于为什么这样修改,应该很好理解,不多解释了。
不足之处,欢迎留言,评论会及时回复,错误会及时更正!
创作不易,感谢支持!
最后的最后,欢迎访问我的个人博客XJHui’s Blog。