Local Search 搜索出来的URL不正确的解决办法

简介

突然发现此博客的搜索功能不正常了,解决一下。

环境

hexo
nexT主题
Local Search

配置

根据nexT文档-搜索服务配置

BUG

  1. 点击侧边栏搜索
  2. 搜索任意字符
  3. 点击任意搜索结果
    预期结果:跳转到相应文章页面,页面URL应为https://xxxx.qithub.io/2018/01/01/xxx.html
    显示结果:无法跳转到相应页面,页面的URL为http://0.0.7.226/01/01/xxx.html

调试

走了许多弯路,搜了半天的0.0.7.226,费了很长时间,结果发现是hexo-generator-searchdb生成的search.xml中,文章的URL不对,在编码之后,文章的URL应该是下面这样的:

%2F2018%2F01%2F01%2Fxxx.html

但实际上却生成了这样的

%2F%2F2018%2F01%2F01%2Fxxx.html

多了一个%2F,也就是说,在URL解码之后,多了一个/
但我没仔细想,为什么//2018在innerHTML的时候会变成http://0.0.7.226,应该是一些莫名其妙的转换吧,如果有知道的大佬请告知我原因。
看了一下hexo-generator-searchdb作者的issues,也没发现有别人出现这种问题,想了一下,应该是此插件和hexo-abbrlink插件同时使用的原因,生成静态网页的时候多加了一个/

解决方案

因为我也没用过nodejs,所以就暴力解决一下
node_modules/hexo-generator-searchdb/目录下,搜索url字段
应该有以下几个文件是需要修改的

json_generator.js
xml_generator.js
xml.ejs

把搜出来的那行中,config.root都删掉,比如xml_generator.js文件中,相关代码是这样的

1
2
3
4
5
6
7
8
 var xml = template({
config: config,
posts: posts,
pages: pages,
raw: raw,
limit: searchlimit,
feed_url: config.root + searchConfig.path
});

改为

1
2
3
4
5
6
7
8
 var xml = template({
config: config,
posts: posts,
pages: pages,
raw: raw,
limit: searchlimit,
feed_url: searchConfig.path
});

重新生成hexo g,查看搜索结果,应该就可以正常使用了。

后记

我大概看了一下,这个config.root,大概率就是_config.yml文件中的那个root项,但是全局搜索了一下config.root这个字段,有多个插件在用,也就没有继续调试的兴趣了,做一条只知其然的咸鱼罢。
如果有大佬有更好的解决方案,请务必告知我,我将不胜感激!

您的支持将鼓励我继续创作!