# 05-routing-fix.md - 子路径路由修复 ## 问题描述 通过 Tailscale 路径 `/blog` 访问博客时,除首页外其他链接会跳转到 OpenClaw Web 控制页根路径。 **根本原因:** Hugo 配置中 `baseURL` 设置为 `http://localhost:1313/`,未包含 `/blog` 子路径前缀,导致生成的 HTML 链接指向 `/` 而非 `/blog/`。 ## 修复方案 ### 1. 修改 config.toml **文件:** `site/config.toml` ```diff - baseURL = "http://localhost:1313/" + baseURL = "/blog/" ``` 设置相对路径 `/blog/`,使 Hugo 生成的所有链接都带 `/blog` 前缀。 ### 2. 修改 baseof.html 模板 **文件:** `site/layouts/_default/baseof.html` 将硬编码的绝对路径替换为 Hugo 模板函数: | 原始代码 | 修复后 | |---------|--------| | `href="/css/main.css"` | `href="{{ "css/main.css" \| absURL }}"` | | `href="/"` | `href="{{ "" \| absURL }}"` | | `href="/journey"` | `href="{{ "journey" \| absURL }}"` | **说明:** - `absURL` 函数会基于 `baseURL` 生成完整路径(如 `/blog/css/main.css`) - 对于文章列表页使用 `.RelPermalink`(已自动处理子路径) ### 3. 修改 docker-compose.yml **文件:** `docker-compose.yml` ```diff - command: ["server", "-D", "--bind", "0.0.0.0", "--baseURL", "http://localhost:1313"] + command: ["server", "-D", "--bind", "0.0.0.0", "--baseURL", "http://localhost:1313/blog/"] ``` 确保容器启动时使用正确的 baseURL。 ## 验证步骤 ### 本地验证 ```bash # 1. 启动服务 cd /Users/guchen/.openclaw/workspace/org/cases/val_blog docker compose up -d # 2. 验证首页访问 curl -s http://127.0.0.1:1313/blog/ | grep -E 'href=' # 3. 验证文章页访问 curl -s http://127.0.0.1:1313/blog/journey/ | grep -E 'href=' # 4. 验证生成静态文件的链接 docker exec val-blog-dev hugo -d /tmp/hugo-public docker exec val-blog-dev grep -r 'href=' /tmp/hugo-public/index.html ``` **预期结果:** - 所有 `href` 属性都包含 `/blog/` 前缀 - CSS 链接:`http://localhost:1313/blog/css/main.css` - 导航链接:`http://localhost:1313/blog/`、`http://localhost:1313/blog/journey` - 文章链接:`/blog/journey/xxx/` ### Tailscale 验证 通过 Tailscale 访问时,确保以下映射配置: ```bash # 查看当前 Tailscale serve 配置 tailscale status tailscale serve status # 如需添加 /blog 路径映射(如果尚未配置) tailscale serve --http=80 tcp:1313 # 然后在控制台将 /blog 路径映射到 Hugo 服务 ``` ## 回滚方案 如需回滚到根路径配置,执行以下操作: 1. **config.toml:** ```toml baseURL = "http://localhost:1313/" ``` 2. **baseof.html:** ```html 首页 旅程 ``` 3. **docker-compose.yml:** ```yaml command: ["server", "-D", "--bind", "0.0.0.0", "--baseURL", "http://localhost:1313"] ``` ## Tailscale Serve 建议命令 如果需要调整 Tailscale 路径映射: ```bash # 方式一:仅映射 /blog 路径 tailscale serve http://127.0.0.1:1313/blog # 方式二:查看当前映射状态 tailscale serve status # 方式三:添加自定义域名的路径映射(需要 DNS 配置) tailscale serve --bg your-domain.ts.net http://127.0.0.1:1313/blog ``` ## 修改文件清单 | 文件 | 操作 | |------|------| | `site/config.toml` | 修改 baseURL | | `site/layouts/_default/baseof.html` | 替换硬编码链接 | | `docker-compose.yml` | 更新启动命令 |