Jekyll中如何获取带哈希锚点的完整页面URL路径?
原因说明
URL中#开头的片段属于浏览器端解析的内容,HTTP请求发送到服务端时会自动丢弃#及后续所有字符。Jekyll是静态站点生成工具,所有页面内容在构建阶段就已经生成完成,构建过程完全无法感知用户最终访问时URL携带的哈希值,因此内置变量{{ page.url }}只会返回页面对应的静态路径,不会包含锚点部分。
实现方法
根据你的使用场景选对应方案即可:
场景1:需要生成指向当前页固定锚点的链接(比如明确要指向
#update锚点)
直接用Liquid语法拼接锚点即可,要得到你需要的/categories/#update格式,模板里写:{{ page.url | relative_url }}#update如果你的站点permalink配置没有自动给路径加末尾斜杠,可以手动补全:
{{ page.url | relative_url | append: '/' }}#update场景2:需要动态获取用户访问时实际携带的任意哈希值(比如用户可能带不同锚点访问,要实时拿到完整带hash的路径)
这类动态逻辑无法在Jekyll构建阶段实现,需要通过前端JavaScript在用户浏览器端获取,直接在页面模板里加入如下代码即可:<script> // 拿到带哈希的完整路径,格式为 /路径/#锚点 const fullPathWithHash = window.location.pathname + window.location.hash; // 后续可以基于这个值做逻辑处理,比如修改页面链接、做锚点高亮等 </script>
注意:静态站点没有服务端动态解析请求的步骤,所有和用户实时访问状态相关的逻辑,都需要放到前端侧执行,不要尝试在Liquid模板层面获取运行时的URL哈希。
内容的提问来源于stack exchange,提问作者Dhanesh Saini
相关产品推荐
相关产品推荐

