导读:
Shadowrocket(小火箭)的 Rewrite(重写) 功能主要用于修改网络请求和响应,包括 URL 跳转、请求头/体修改、响应体修改、去广告等,以下是完整的配置指南和常用脚本示例。
配置文件结构
Rewrite 配置通常写在 .conf 配置文件的 [Rewrite] 和 [Script] 段落中:
[General] [MITM] # HTTPS解密必需 hostname = api.example.com, *.google.com ca-passphrase = 密码 ca-p12 = 证书内容(或留空使用生成证书) [Rewrite] # URL重写规则(302/307/reject等) [Script] # JavaScript脚本规则
URL Rewrite 规则
用于简单的 URL 跳转或拦截(无需脚本):
[Rewrite] # 格式:正则 类型 目标(可选) # 类型:302, 307, reject, reject-img, reject-dict, reject-array, header, header-del # HTTP 强制跳转 HTTPS ^http://(www\.)?example\.com https://$1example.com 302 # 拒绝广告请求(返回空内容) ^https?://.+\.googlevideo\.com/.+&oad reject # 拒绝图片(节省流量) ^https?://.+\.adserver\.com/.+\.(jpg|png|gif) reject-img # 修改请求头(添加/修改) ^https?://api\.example\.com header-replace User-Agent Mozilla/5.0 # 删除请求头 ^https?://api\.example\.com header-del X-Forwarded-For
Script 脚本规则
用于复杂的逻辑处理(修改 JSON、注入代码、计算等)。
脚本类型
| 类型 | 说明 |
|---|---|
script-request-header |
修改请求头(发送前) |
script-request-body |
修改请求体(POST数据) |
script-response-header |
修改响应头 |
script-response-body |
最常用,修改响应内容(JSON/HTML) |
基本语法
[Script] # 格式:类型 正则 参数 http-response ^https?://api\.example\.com/v1/userinfo script-path=https://raw.githubusercontent.com/user/repo/script.js, requires-body=true, timeout=10, tag=解锁VIP
关键参数:
script-path: 脚本路径(本地路径或远程URL)requires-body=true: 是否需要获取/修改响应体(修改内容时必须)requires-header=true: 是否需要获取/修改请求头timeout=10: 脚本执行超时时间(秒)tag: 规则名称(可选)
JavaScript 脚本模板
模板 1:修改响应 JSON(解锁/去广告)
// 保存为 unlock.js
let body = $response.body;
let obj = JSON.parse(body);
// 修改字段示例
obj.data.is_vip = true;
obj.data.vip_expire = "2099-12-31";
obj.data.ads = []; // 清空广告数组
$done({body: JSON.stringify(obj)});
配置引用:
[Script] http-response ^https?://api\.example\.com/v1/user/info requires-body=1,script-path=unlock.js,tag=示例解锁
模板 2:请求头修改(User-Agent/Cookie)
// header.js
let headers = $request.headers;
headers['User-Agent'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X)';
headers['X-Auth-Token'] = 'your_token_here';
$done({headers: headers});
配置引用:
[Script] http-request ^https?://api\.example\.com requires-header=1,script-path=header.js,tag=修改UA
模板 3:重定向(302/307)
// redirect.js
$done({
status: "HTTP/1.1 302 Found",
headers: {
"Location": "https://target.com/new-path"
}
});
完整配置示例
以下是一个实用的去广告+解锁配置框架:
[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 [MITM] enable = true hostname = *.example.com, api.zhihu.com, mp.weixin.qq.com [Rewrite] # 知乎去广告 ^https?://api\.zhihu\.com/(fringe|zst|commercial|real_time|ad-style-service|.*(recommendations|commercial)) reject-dict ^https?://api\.zhihu\.com/bazaar/vip/promotion reject-dict [Script] # 知乎优化(示例) http-response ^https?://api\.zhihu\.com/v4/questions requires-body=1,script-path=https://raw.githubusercontent.com/app2smile/rules/master/js/zhihu.js,tag=知乎去广告 # 微信公众号去广告 http-response ^https?://mp\.weixin\.qq\.com/mp/getappmsgad requires-body=1,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/Wechat.js,tag=微信去广告 # 本地脚本示例(解锁某App) http-response ^https?://api\.example\.com/v1/account requires-body=1,script-path=local/unlock.js,tag=本地解锁
关键注意事项
MITM(HTTPS解密)
修改 HTTPS 响应 必须开启 MITM:
- 在
[MITM]中填写目标域名hostname - 安装并信任证书:Shadowrocket 设置 → 证书 → 生成/安装 → 去系统设置信任
本地脚本路径
- iCloud 路径:
file:///var/mobile/Library/Mobile Documents/iCloud~com~shadowrocket~app/Documents/script.js - 本地绝对路径:
/var/mobile/Library/Shadowrocket/Scripts/script.js(需先创建文件夹)
调试技巧
- 查看日志:Shadowrocket 设置 → 日志(Log)
- 脚本报错时,检查
requires-body是否开启 - 正则表达式测试:使用 regex101.com 验证
性能优化
- 尽量使用
reject而非脚本拦截广告(性能更好) - 远程脚本建议下载到本地使用(避免网络延迟)
常用脚本资源(GitHub)
- NobyDa/Script:经典去广告、解锁脚本合集
- app2smile/rules:知乎、哔哩哔哩等优化
- yichahucha/surge:微博、淘宝历史价格查询
- chavyleung/scripts:签到脚本合集
使用建议:从远程仓库复制脚本到本地使用,避免原始仓库更新导致异常,同时减少对外网依赖。
需要特定 App 的 Rewrite 规则可以告诉我具体应用名称,我可以提供针对性的配置示例。