Hexo--本地搜索localsearch之url路径问题

Hexo localsearch 本地搜索 路径问题 /

什么是本地搜索

针对本地存储文件内容进行搜索,也就是我们搜索的内容都在本地

Hexo 本地搜索 localsearch

我们用的本地搜素插件是 hexo-generator-searchdb

在我们执行 hexo g 的时候,会在本地输出一个 search.xml 文件 (文件名可以配置)

打开这个文件,可以看到你所有文章的一些简单配置,我们截取其中一部分来看

1
2
3
4
5
6
7
8
<entry>
<title><![CDATA[Hexo--图片居中显示]]></title>
<url>%2F2019-09%2F05-hexo-image-center.html</url>
<content type="text"><![CDATA[默认情况下...]]></content>
<categories>
<category>Hexo</category>
</categories>
</entry>

包含了标题,文章的url地址、文章主要内容 等等

当我们输入搜索的时候,其实对这个文件内容进行搜索

hexo localsearch 本地搜索 路径问题

我们先看下 搜索插件的源代码配置

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<search>
<% if(posts){ -%>
<% posts.slice(0,limit).each(function(post){ -%>
<entry>
<title><%-: post.title | cdata %></title>
<url><%- encodeURIComponent(config.root + post.path) %></url>
<content type="text"><%-: raw ? post[raw] : post.content | cdata %></content>
...
</entry>
<% }) -%>
</search>

我们可以看到插件会对url进行编码 encodeURIComponent,导致url里面的路径分隔符 / 会被编码成 %2F

因此引发一些相对路径的问题

比如我们在 https://www.difashi.com/category/ 下进行搜索的时候

结果的url链接是 %2F2019-09%2F04-django-models-api.html

相对路径拼起来就变成了 https://www.difashi.com/category/%2F2019-09%2F04-django-models-api.html

因此

本质我们需要的url参数是 /%2F2019-09%2F04-django-models-api.html 必须有最前面的 / 表示根路径

最后的方案是,我们直接修改了 本地搜索生成html的源代码

themes/next/layout/scripts/third-party/localsearch.swig

扎到修改url的地方

1
2
3
...
str += "<li><a href='"+ data_url +"' class='search-result-title'>"+ data_title +"</a>";
...

修改为

1
2
3
...
str += "<li><a href='/"+ data_url +"' class='search-result-title'>"+ data_title +"</a>";
...

细心发现我们的主要修改点是 加斜杠 / 表示根路径

完毕!

坚持原创技术分享,谢谢鼓励我继续创作!