乐于分享
好东西不私藏

OpenClaw 帮我做了一个 5,486 个完整列表 skill 网站

OpenClaw 帮我做了一个 5,486 个完整列表 skill 网站

点击上方🔺公众号🔺关注我✅

📝 前言

今天晚上接到一个任务:把 OpenClaw 技能库网站的访问路径从 /openskill/ 改成 /skill/

听起来很简单,改个 nginx 配置而已。但实际做起来,踩了一堆坑

记录一下今晚的踩坑历程,给同样在折腾 nginx 的朋友一些参考。


🚨 问题一:HTTPS 访问被"拦截"

现象

修改完 nginx 配置后,HTTP 访问正常:

http://IP/skill/ ✅ 正常

但 HTTPS 访问被重定向到了首页:

https://IP/skill/ ❌ 跳转到 /blog/

原因分析

我的服务器有两个 nginx 配置文件:

配置文件
端口
用途
ai-prompts
80
HTTP,博客 + 编辑器 + 发布助手
openclaw
443
HTTPS,OpenClaw Gateway + 博客

问题就在这里! 我只在 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 ❌ 404

nginx 错误日志:

open() "/usr/share/nginx/html/skill/style.css" failed (2: No such file or directory)

原因分析

nginx 的 location 匹配优先级:

  1. 精确匹配
    location = /path(优先级最高)
  2. 正则匹配
    location ~* \.(css|js)$
  3. 前缀匹配
    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 匹配顺序:

  1. location = /path
    (精确匹配)
  2. location ^~ /path
    (前缀匹配,不检查正则)
  3. location ~* pattern
    (正则匹配,不区分大小写)
  4. location ~ pattern
    (正则匹配,区分大小写)
  5. 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 技能库网站可以通过以下地址访问:

HTTPS:
 https://yichushiwu.club/open-skill/ ✅

网站包含:

  • 🔥 技能排行榜 TOP50 - 按热度综合评分
  • 📁 32 个技能分类 - 每个分类独立页面
  • 📜 全部技能列表 - 5,486 个完整列表
  • 📋 一键安装 - 复制 clawhub 安装命令

🌟 太阳鸟的 AI 宝藏库 | 专注 AI 实战经验分享

社群权益:副业项目 · AI 付费星球 · 涨粉教学 · 干货分享 · 嘉宾分享 · 答疑解惑 · 产品首发

👉 加入太阳鸟社群,一起探索 AI 赚钱新姿势!

太阳鸟 

98年在职成长型博主

【添加太阳鸟微信送你一份惊喜副业大礼包+技术交流群】