Hexo全文搜索地址错误
2021-04-05 20:05 ≈ 554字 ≈ 2分钟

Hexo搭好已经6天了,正常使用感觉非常好,今天发现了一个问题,在使用全文搜索的时候,如果你当前的页面不是首页,那么搜索出来的地址是错误的。

跟踪了一下错误地址,发现是额外增加了当前地址造成的。

用我的网站举例,比如说当前的地址是:https://www.igerm.ee/categories/gossip/,然后我随便搜索一个内容

image-20210405200959515

第一个文章的实际地址应该是:https://www.igerm.ee/2021/04/04/tech/Hexo美化优化极致追分/

但是添加在a标签里面的地址是:https://www.igerm.ee/categories/gossip/2021/04/04/tech/Hexo美化优化极致追分/这样就导致点击标题无法进入文章页面,而进入了404页面

初步猜测有可能是地址自动拼接造成的,看一下源码,我相信search部分如果没有特殊需求,大家的源码都是复制官方插件的demo,那么咱们的应该是一致的,从isMatch部分开始:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
if (isMatch) {
str += "<li><a href='" + "<%- theme.avatar.path %>" + data_url + "' class='search-result-title'>" + orig_data_title + "</a>";
var content = orig_data_content;
if (first_occur >= 0) {
// cut out 100 characters
var start = first_occur - 20;
var end = first_occur + 80;

if (start < 0) {
start = 0;
}

if (start == 0) {
end = 100;
}

if (end > content.length) {
end = content.length;
}

var match_content = content.substr(start, end);

// highlight all keywords
keywords.forEach(function (keyword) {
var regS = new RegExp(keyword, "gi");
match_content = match_content.replace(regS, "<span class=\"search-keyword\">" + keyword + "</span>");
});

str += "<p class=\"search-result-abstract\">" + match_content + "...</p>"
}
str += "</li>";
}

第二行的str就是输出a标签的地方,可以看到我已经在前面添加了"<%- theme.avatar.path %>",因为data_url里面的地址是文章地址去掉网站地址的部分,如果你不在前面补全网址,那么在页面上就会自动以当前页面的地址进行拼接,也就造成了上面提到的错误,这里我将我自己网站主地址拼接完整,那么搜索出来的地址就没问题了。