因为之前的博客各种乱七八糟的东西都有,不太方便分享,干脆删库新建两个博客。

主博客存储专业相关的东西,另一个博客随便写写随笔。但是在部署博客时出现了图片加载404,部分博客无法加载的问题。

问题描述

主博客设置在了 github.io 仓库下,另一个博客则在其他仓库中,都使用同仓库不同分支利用 Github Actions 进行 CI/CD 自动部署。

部署主博客的时候一切正常,但是部署完个人博客后发现,更换和主博客不同的图片时,在本地运行 npm server 一切正常,但是部署后则图片会出现 404 报错,打开控制台后现实也很草率:

1
Failed to load resource: the server responded with a status of 404 ()                 /404.html:1 

直接蚌埠住了,然后想着多发几个博客,试试其他图片,结果 ……

还是本地一切正常,部署后主页能看到新的博客,但是点进去就开始疯狂加载(但加载不出来),直接卡住了,>﹏<

打开控制台看到报错如下:

1
GET https://cx330-502.github.io/2023/09/05/2023-09/2023-09-04-2/ net::ERR_ABORTED 404 

不是一条,是几十几百条~~~

解决方案

可能有人已经看出问题了,

我的仓库实际上并不是 github.io 但是这里的 GET 请求却是对 https://cx330-502.github.io/ 发出的,能请求到就有鬼了。

接下来通过 New bing 的帮助,我找到了相关配置选项的位置——在 Hexo 的根文件夹的配置文件 _config.yml 中有这样一堆配置:

1
2
3
4
5
6
7
8
# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url: https://cx330-502.github.io/******
permalink: :year/:month/:day/:title/
permalink_defaults:
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks

于是我兴高采烈的配置了 url ,结果 …… 并没有用

事实上最重要的配置文件在这里并没有给出来,查阅 Hexo 的 官方文档) 后可以看到这里的参数如下:

参数 描述 默认值
url 网址, 必须以 http://https:// 开头
root 网站根目录 url's pathname
permalink 文章的 永久链接 格式 :year/:month/:day/:title/
permalink_defaults 永久链接中各部分的默认值
pretty_urls 改写 permalink 的值来美化 URL
pretty_urls.trailing_index 是否在永久链接中保留尾部的 index.html,设置为 false 时去除 true
pretty_urls.trailing_html 是否在永久链接中保留尾部的 .html, 设置为 false 时去除 (对尾部的 index.html无效) true

甚至下面还有个注释:

网站存放在子目录

如果您的网站存放在子目录中,例如 http://example.com/blog,则请将您的 url 设为 http://example.com/blog 并把 root 设为 /blog/

它真的,我哭死。那所以为什么最重要的 root 参数没直接给出来呢 orz 。

于是,把上面的配置改成:

1
2
3
4
5
6
7
8
9
# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url: https://cx330-502.github.io/*****
root: /*****/
permalink: :year/:month/:day/:title/
permalink_defaults:
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks

可以看到在本地运行时,url 变成了 http://localhost:4000/*****/

再 push 一下,部署完成后看到完美解决问题