导读:
Shadowrocket(小火箭)的 Rewrite(重写) 功能主要用于修改 HTTP 请求/响应,包括 URL 重定向、请求头修改、响应体篡改(如去广告、解锁 VIP 等),以下是详细的使用指南和脚本示例:
基础语法结构
简单重写规则(配置文件中直接写)
在 Shadowrocket 配置的 [Rewrite] 段落添加:
[Rewrite]^http://example\.com http://new.com 302 # 拒绝连接(去广告) ^https?://ad\.example\.com reject # 修改请求头 ^https?://api\.example\.com header-add X-Custom-Header Value # 删除响应头 ^https?://api\.example\.com header-del X-Frame-Options
JavaScript 脚本(功能更强大)
在 [Script] 段落引用外部脚本或内联脚本:
[Script] # 修改响应体(如解锁 VIP、去广告) ScriptName = type=http-response,pattern=^https?://api\.example\.com/user,requires-body=1,script-path=local/script.js # 修改请求体 ScriptName2 = type=http-request,pattern=^https?://api\.example\.com/upload,requires-body=1,script-path=local/upload.js
JavaScript 脚本示例
示例 1:解锁 VIP(修改 JSON 响应)
文件:unlock_vip.js
var body = $response.body;
var obj = JSON.parse(body);
// 修改用户状态为 VIP
obj.data.is_vip = true;
obj.data.vip_expire_time = "2099-12-31";
obj.data.level = 99;
$done({body: JSON.stringify(obj)});
配置引用:
[Script] UnlockVIP = type=http-response,pattern=^https?://api\.example\.com/v1/user/info,requires-body=1,script-path=unlock_vip.js
示例 2:去广告(清空广告数组)
var body = $response.body;
var obj = JSON.parse(body);
// 清空广告列表
if (obj.data && obj.data.ads) {
obj.data.ads = [];
}
// 或者删除特定字段
delete obj.data.banner;
$done({body: JSON.stringify(obj)});
示例 3:修改请求参数(URL 或 Body)
// 修改 URL 参数
var url = $request.url;
url = url.replace(/version=\d+/, "version=999");
// 如果是 POST 请求修改 body
var body = $request.body;
body = body.replace(/device_id=[^&]*/, "device_id=fake_id_123");
$done({url: url, body: body});
示例 4:重定向(302 跳转)
$done({
status: "HTTP/1.1 302 Found",
headers: {
"Location": "https://new-url.com"
}
});
配置步骤
开启 HTTPS 解密(MitM)
必须步骤,否则无法解析 HTTPS 内容:
- 设置 → 证书 → 生成新的 CA 证书 → 安装描述文件
- iOS 设置 → 通用 → 关于本机 → 证书信任设置 → 开启 Shadowrocket 证书
开启 MitM 功能
在配置文件中添加:
[MITM] hostname = api.example.com, *.api.com enable = true
添加脚本
方式 A:本地文件
- 将
.js文件放入 iCloud/Shadowrocket 文件夹(或文件 App 中) script-path使用相对路径如local/unlock.js
方式 B:远程链接
[Script] RemoteScript = type=http-response,pattern=^https?://api\.example\.com,requires-body=1,script-path=https://raw.githubusercontent.com/xxx/script.js
常用 Pattern 正则示例
# 匹配特定 API ^https?://api\.example\.com/v\d+/user # 匹配多个域名 ^https?://(api|app)\.(example|test)\.com # 匹配特定文件类型 ^https?://.*\.example\.com/.*\.(json|js|html)
注意事项
- 权限问题:iOS 15+ 对本地文件访问有限制,建议使用远程脚本或 iCloud 路径
- 性能影响:复杂的正则和脚本会增加延迟,避免使用 贪婪匹配
- 语法差异:Shadowrocket 脚本与 Quantumult X 类似,但不完全兼容(主要区别在
$done()用法) - 调试方法:使用
$notify("标题", "副标题", "内容")弹出调试信息,或console.log()在日志中查看 - 合法性警告:修改响应数据可能违反服务条款,仅供学习交流使用
完整配置模板
[General] bypass-system = true skip-proxy = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, localhost, *.local, captive.apple.com dns-server = 223.5.5.5, 8.8.8.8 [Rule] DOMAIN-SUFFIX,example.com,DIRECT [Rewrite] ^http://(www\.)?example\.com https://www.example.com 302 [Script] VIPUnlock = type=http-response,pattern=^https?://api\.example\.com/account,requires-body=1,script-path=local/vip.js [MITM] hostname = api.example.com enable = true
需要特定功能的脚本(如 TikTok 解锁、YouTube 去广告等),可以提供具体 API 地址帮你编写对应的 Rewrite 规则。