点击上方🔺公众号🔺关注我✅
📝 前言
今天晚上接到一个任务:把 OpenClaw 技能库网站的访问路径从 /openskill/ 改成 /skill/。
听起来很简单,改个 nginx 配置而已。但实际做起来,踩了一堆坑。
记录一下今晚的踩坑历程,给同样在折腾 nginx 的朋友一些参考。

🚨 问题一:HTTPS 访问被"拦截"
现象
修改完 nginx 配置后,HTTP 访问正常:
http://IP/skill/ ✅ 正常但 HTTPS 访问被重定向到了首页:
https://IP/skill/ ❌ 跳转到 /blog/原因分析
我的服务器有两个 nginx 配置文件:
ai-prompts | ||
openclaw |
问题就在这里! 我只在 ai-prompts(HTTP 80 端口)中配置了 /skill/ 路由,但用户访问的是 HTTPS(443 端口),用的是 openclaw 配置。
所以 /skill/ 请求被 location / 默认代理到了 OpenClaw Gateway,看起来就像被"拦截"了。
解决方案
在 openclaw 配置中添加 /skill/ 路由:
# OpenClaw 技能库站点 - /skill 路径location = /skill { return 301 /skill/;}location /skill/ { alias /root/Projects/openclaw-skills-site/dist/; index index.html;}🚨 问题二:静态资源 404
现象
主页能正常访问了,但 CSS/JS 文件全部 404:
https://47.113.185.227/skill/style.css ❌ 404https://47.113.185.227/skill/index.js ❌ 404nginx 错误日志:
open() "/usr/share/nginx/html/skill/style.css" failed (2: No such file or directory)原因分析
nginx 的 location 匹配优先级:
- 精确匹配
location = /path(优先级最高) - 正则匹配
location ~* \.(css|js)$ - 前缀匹配
location /path/(优先级最低)
我的配置中,静态资源的正则匹配在 location /skill/ 之后,但正则优先级更高,所以被匹配了,但没有正确的 alias 路径。
解决方案
简化配置,只用前缀匹配:
location /skill/ { alias /root/Projects/openclaw-skills-site/dist/; index index.html; try_files $uri $uri.html /skill/index.html;}🚨 问题三:SPA 路由 404
现象
用户点击技能卡片,跳转到详情页:
https://IP/skill/skill-main.html ❌ 404原因分析
技能库网站是静态站点,但 HTML 中的技能卡片点击跳转到了 skill-main.html(详情页模板),而这个文件实际上不存在。
解决方案
临时方案:nginx 重定向
# 技能详情页(不存在,重定向到首页)location = /skill/skill-main.html { return 302 /skill/;}🚨 问题四:安装命令全是 main
现象
用户点击"安装"按钮,复制的命令是:
npx clawhub@latest install main # ❌ 所有技能都是 main原因分析
检查 build.js 中的 slug 提取逻辑:
// 原代码const skillSlug = url.match(/\/skills\/[^/]+\/([^/]+)/)?.[1] || name;这个正则无法正确从 GitHub URL 中提取 slug:
https://github.com/openclaw/skills/tree/main/skills/author/skill-name/SKILL.md匹配结果是 main,而不是 skill-name。
解决方案
修复正则表达式:
// 修复后const skillSlug = url.match(/\/skills\/[^/]+\/([^/]+)\/SKILL\.md$/)?.[1] || url.match(/\/skills\/([^/]+)\/SKILL\.md$/)?.[1] || name.toLowerCase().replace(/[^a-z0-9]+/g, '-');现在每个技能的安装命令都正确了:
npx clawhub@latest install neo-graphql-ts-generator ✅npx clawhub@latest install homeassistant-skill ✅npx clawhub@latest install emily-radix-assistant ✅📋 经验总结
1️⃣ 多配置文件时,注意端口对应
如果你的 nginx 有多个配置文件(如 ai-prompts 和 openclaw),修改路由时要两个都改,否则会出现 HTTP 正常但 HTTPS 异常的情况。
2️⃣ 理解 location 匹配优先级
nginx 的 location 匹配顺序:
location = /path(精确匹配) location ^~ /path(前缀匹配,不检查正则) location ~* pattern(正则匹配,不区分大小写) location ~ pattern(正则匹配,区分大小写) location /path(前缀匹配)
静态资源的正则匹配优先级高于前缀匹配,所以要小心处理。
3️⃣ try_files 处理 SPA 路由
对于单页应用(SPA),使用 try_files 处理前端路由:
try_files $uri $uri.html /skill/index.html;这样访问不存在的页面时,会回退到 index.html,由前端路由处理。
4️⃣ 测试配置变更
每次修改 nginx 配置后,执行:
nginx -t # 测试配置语法systemctl reload nginx # 重载配置curl -sI https://your-domain/skill/ # 验证访问tail -f /var/log/nginx/error.log # 监控错误日志🌐 访问地址
现在 OpenClaw 技能库网站可以通过以下地址访问:
网站包含:
🔥 技能排行榜 TOP50 - 按热度综合评分 📁 32 个技能分类 - 每个分类独立页面 📜 全部技能列表 - 5,486 个完整列表 📋 一键安装 - 复制 clawhub 安装命令


🌟 太阳鸟的 AI 宝藏库 | 专注 AI 实战经验分享
社群权益:副业项目 · AI 付费星球 · 涨粉教学 · 干货分享 · 嘉宾分享 · 答疑解惑 · 产品首发
👉 加入太阳鸟社群,一起探索 AI 赚钱新姿势!

太阳鸟
98年在职成长型博主
【添加太阳鸟微信送你一份惊喜副业大礼包+技术交流群】

夜雨聆风