cloudflare-redirector
Cloudflare Redirector
AI Agent Instructions (AI 使用指南)
每次使用此 skill 时,AI 必须执行以下检查:
0. 自动化执行原则
重要:除非用户明确要求分步执行,否则应该一次性自动完成所有操作。
执行顺序:
- 检查环境变量 → 如果缺失,引导配置后继续
- 检查项目文件 → 如果不存在,初始化项目
- 根据用户需求配置重定向规则
- 执行
pnpm run dns:sync(同步 DNS) - 执行
pnpm run deploy(部署 Worker) - 执行
curl -I验证重定向是否生效 - 输出成功信息和后续管理说明
只在以下情况暂停询问用户:
- 环境变量未配置(必须先配置才能继续)
- 用户明确要求 dry-run 或预览模式
- 执行过程中出现错误
1. 环境变量检测
首先检查必需的环境变量是否已配置:
echo "CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:+已配置}"
echo "CLOUDFLARE_ACCOUNT_ID: ${CLOUDFLARE_ACCOUNT_ID:+已配置}"
如果未配置,必须先引导用户配置,告诉用户:
# 临时配置(当前终端有效)
export CLOUDFLARE_API_TOKEN=your_token_here
export CLOUDFLARE_ACCOUNT_ID=your_account_id_here
# 永久配置(推荐)- 添加到 ~/.zshrc 或 ~/.bashrc
echo 'export CLOUDFLARE_API_TOKEN=your_token_here' >> ~/.zshrc
echo 'export CLOUDFLARE_ACCOUNT_ID=your_account_id_here' >> ~/.zshrc
source ~/.zshrc
并引导用户查看下方 "如何获取 Cloudflare 凭证" 部分。
2. 项目文件检测
检查是否存在必需文件:
data/redirects.jsonwrangler.jsoncpackage.json
如果不存在,说明是首次使用,需要初始化项目。
3. 首次使用初始化流程
如果检测到空文件夹或缺少必需文件,执行以下步骤:
Step 1: 询问项目名称
询问用户想要创建的项目名称(默认:my-redirector)。
Step 2: 创建项目文件夹
mkdir my-redirector
cd my-redirector
Step 3: 从 skill 目录复制模板文件
找到 cloudflare-redirector skill 的安装路径(通常在 ~/.kiro/skills/ 或项目的 .kiro/skills/ 下),然后复制必要文件:
# 假设 skill 路径为 $SKILL_PATH
cp -r $SKILL_PATH/data ./
cp -r $SKILL_PATH/scripts ./
cp -r $SKILL_PATH/src ./
cp $SKILL_PATH/package.json ./
cp $SKILL_PATH/wrangler.jsonc ./
cp $SKILL_PATH/.env.example ./.env.example
Step 4: 安装依赖
pnpm install
Step 5: 引导用户配置
提醒用户:
- 配置环境变量(参考 .env.example)
- 编辑
data/redirects.json添加重定向规则 - 编辑
wrangler.jsonc配置路由
完成初始化后,用户就可以开始使用了。
Prerequisites (前提条件)
新手必读:使用此 skill 前,你需要:
- Cloudflare 账号:在 cloudflare.com 注册免费账号
- 域名托管在 Cloudflare:你的域名 DNS 需要使用 Cloudflare(在域名注册商处修改 Nameservers)
- 本地环境:
- 已安装 Node.js (v18+)
- 已安装 pnpm (
npm install -g pnpm)
- Cloudflare 凭证:
- API Token(需要权限:Zone.DNS Edit + Workers Scripts Edit)
- Account ID
如何获取 Cloudflare 凭证?
获取 API Token:
- 登录 Cloudflare Dashboard
- 进入 "My Profile" → "API Tokens"
- 点击 "Create Token"
- 选择 "Edit Cloudflare Workers" 模板,并添加 "Zone.DNS Edit" 权限
- 复制生成的 Token
获取 Account ID:
- 登录 Cloudflare Dashboard
- 进入任意域名的 Overview 页面
- 右侧栏可以看到 "Account ID"
初始化模板 (Initialization Templates)
package.json 模板
{
"name": "cloudflare-redirector",
"version": "1.0.0",
"type": "module",
"scripts": {
"build:rules": "node scripts/compile-rules.mjs",
"dns:sync": "node scripts/sync-dns.mjs",
"dns:sync:dry-run": "node scripts/sync-dns.mjs --dry-run",
"deploy": "pnpm run build:rules && wrangler deploy",
"deploy:dry-run": "pnpm run build:rules && wrangler deploy --dry-run"
},
"devDependencies": {
"wrangler": "^3.0.0"
}
}
wrangler.jsonc 模板
{
"name": "redirector",
"main": "src/index.js",
"compatibility_date": "2024-01-01",
"routes": [
// 示例:{ "pattern": "old.example.com/*", "zone_name": "example.com" }
]
}
data/redirects.json 模板
[
{
"source": "old.example.com",
"destination": "https://new.example.com",
"status": 301
}
]
src/index.js 模板
import redirects from '../data/redirects.compiled.json';
export default {
async fetch(request) {
const url = new URL(request.url);
const hostname = url.hostname;
const rule = redirects.find(r => r.source === hostname);
if (rule) {
return Response.redirect(rule.destination, rule.status);
}
return new Response('Not found', { status: 404 });
}
};
scripts/compile-rules.mjs 模板
import { readFileSync, writeFileSync } from 'fs';
const rules = JSON.parse(readFileSync('data/redirects.json', 'utf-8'));
const compiled = rules.map(r => ({
source: r.source,
destination: r.destination,
status: r.status || 301
}));
writeFileSync('data/redirects.compiled.json', JSON.stringify(compiled, null, 2));
console.log(`✓ Compiled ${compiled.length} redirect rules`);
scripts/sync-dns.mjs 模板
import { readFileSync } from 'fs';
const isDryRun = process.argv.includes('--dry-run');
const token = process.env.CLOUDFLARE_API_TOKEN;
const targetHost = process.env.DNS_TARGET_HOST;
if (!token) {
console.error('❌ CLOUDFLARE_API_TOKEN not set');
process.exit(1);
}
const config = JSON.parse(readFileSync('wrangler.jsonc', 'utf-8'));
const routes = config.routes || [];
console.log(isDryRun ? '🔍 Dry run mode' : '🚀 Syncing DNS records');
console.log(`Found ${routes.length} routes to process`);
// DNS sync logic here (simplified for template)
for (const route of routes) {
const domain = route.pattern.replace('/*', '');
const target = targetHost || route.zone_name;
console.log(`${isDryRun ? '[DRY RUN]' : '✓'} ${domain} → ${target}`);
}
Quick Workflow (快速上手)
第一次使用?跟着这个流程走:
Step 1: 配置环境变量
不要把敏感信息写进代码!在终端执行:
export CLOUDFLARE_API_TOKEN=your_token_here
export CLOUDFLARE_ACCOUNT_ID=your_account_id_here
export DNS_TARGET_HOST=yourdomain.com # 可选,默认使用 zone_name
Step 2: 编辑重定向规则
编辑 data/redirects.json,添加你的重定向规则:
[
{
"source": "old.example.com",
"destination": "https://new.example.com",
"status": 301
}
]
Step 3: 配置路由
编辑 wrangler.jsonc 的 routes 字段,添加需要处理的域名:
{
"routes": [
{ "pattern": "old.example.com/*", "zone_name": "example.com" }
]
}
Step 4: 预览(推荐!)
先用 dry-run 模式检查,不会真正执行:
pnpm run dns:sync:dry-run # 查看会创建哪些 DNS 记录
pnpm run deploy:dry-run # 查看部署配置
Step 5: 正式部署
确认无误后执行:
pnpm run dns:sync # 同步 DNS 记录
pnpm run deploy # 部署 Worker
Step 6: 验证
测试重定向是否生效:
curl -I https://old.example.com
应该看到 301/302 状态码和 Location 头指向目标地址。
Files To Edit
data/redirects.json: 重定向规则(source,destination,status)wrangler.jsonc: Worker 入口与路由(不存账号密钥)
Scripts
scripts/compile-rules.mjs: 规范化并编译规则到data/redirects.compiled.jsonscripts/sync-dns.mjs: 读取wrangler.jsonc路由并同步 CNAME 到 Cloudflare
Commands
pnpm run build:rules
pnpm run dns:sync:dry-run
pnpm run dns:sync
pnpm run deploy:dry-run
pnpm run deploy
Validation
发布后用以下命令检查:
curl -I https://<source-domain>
确认返回状态码(301/302)与 Location 头。
后续管理 (Managing Redirects)
重要:后续所有管理操作都应该通过此 skill 完成,AI 会自动处理。
新增重定向
用户只需说:"添加一个重定向,从 xxx.com 到 https://yyy.com"
AI 会自动:
- 编辑
data/redirects.json添加新规则 - 编辑
wrangler.jsonc添加路由 - 执行
pnpm run dns:sync同步 DNS - 执行
pnpm run deploy部署 - 验证新重定向是否生效
修改重定向
用户只需说:"把 xxx.com 的重定向目标改成 https://zzz.com"
AI 会自动修改配置并重新部署。
删除重定向
用户只需说:"删除 xxx.com 的重定向"
AI 会自动:
- 从
data/redirects.json删除规则 - 从
wrangler.jsonc删除路由 - 重新部署
- (可选)删除 DNS 记录
查看所有重定向
用户只需说:"列出所有重定向规则"
AI 会读取 data/redirects.json 并展示。
批量操作
用户可以提供多个重定向规则,AI 会一次性处理完成。
语言回复规则 (Language Response Rule)
AI 必须使用用户对话的语言进行回复。
- 如果用户用中文提问,用中文回复
- 如果用户用英文提问,用英文回复
- 保持与用户相同的语言风格
References
references/upstream-README.md: 旧仓库使用说明references/legacy-skill-notes.md: 旧技能提示词与历史流程references/wechat-article.md: 背景介绍与实践案例
More from makerjackie/skills
mj-design
|
12mj-adapt
MakerJackie 多平台内容适配工具:将已完成的文章适配到不同发布平台,使用极简硬核风格排版,比如微信公众号,小红书,推特等平台优化排版。核心场景是「一篇文章,多平台发布」的内容分发工作流。
10mj-writer
|
901mvp-design
Apply the official 01MVP visual system to any branded material. Use when the user wants 01MVP posters, business cards, social cards, tutorial slides, UI, dashboards, landing pages, websites, or other external visuals in a unified style. Includes logo assets, templates, tokens, usage rules, and medium-specific playbooks based on the official 01MVP logo kit and UI design sources.
9markdown-formatter
用于优化 Markdown 文章排版、修复格式与错误并提供改进建议。当用户需要整理、润色或排版 Markdown 文章时调用。
8quick-deploy
一键部署工作流。用户说"部署"时自动完成 commit → push → lint/build 检查 → 修复错误 → 部署。自动检测项目类型(静态站点、Node.js、Cloudflare Workers/Pages、Vercel 等)。触发词:部署、发布、发版、ship、deploy、提交发布、推送。
5