Appearance
HTTPS 重写
HTTPS 重写用于按规则重定向、拦截、改写请求或执行脚本。
iOS 上可以做什么
在 iOS 上,HTTPS 重写可以配合可信规则或模块使用,常见用途包括:
- 拦截广告、追踪和统计请求,减少应用内无关内容。
- 对指定 URL 做重定向,例如替换接口地址或修正失效链接。
- 执行请求或响应脚本,用于接口调试、自动化处理和自定义响应。
DANGER
HTTPS 重写会让 Nextin 对指定域名进行 HTTPS 解密。只导入你信任的规则,只对必要的 hostname 开启重写。
开启前条件
使用 HTTPS 重写前需要满足:
- 已安装并完全信任 Nextin 的本机 CA 证书。
- 已添加至少一条重写规则或导入重写模块。
- 代理模式为
规则模式。 - 需要重写的域名已填写到 hostname 列表中,或导入模块中包含 hostname。
如果证书未被完全信任,启用 HTTPS 重写 开关无法开启。
如果开关仍然无法开启,可以查看 HTTPS 重写开关打不开。
安装并信任 CA 证书
- 打开 Nextin。
- 进入
设置。 - 打开
HTTPS 重写。 - 点击
生成并安装 CA 证书。 - Nextin 会打开浏览器下载本机根证书。
- 回到 iOS 系统设置,进入
设置->通用->VPN 与设备管理。 - 在
已下载描述文件中找到未安装的 Nextin 证书,点进去完成安装。 - 再进入
设置->通用->关于本机->证书信任设置。 - 找到
Nextin HTTPS Rewrite Root CA。 - 打开完整信任。
- 回到 Nextin 的
HTTPS 重写页面,等待状态变为已信任。
证书私钥只保存在本机 Keychain 中,不会同步到 iCloud。
安装后状态没有变为已信任时,可以查看 HTTPS 重写开关打不开。
手动添加重写规则
进入 设置 -> HTTPS 重写 -> 添加重写规则。
一条规则通常包含:
| 字段 | 说明 |
|---|---|
| 名称 | 可选,方便识别 |
| 匹配 | URL 正则表达式,匹配完整请求 URL |
| 动作 | 302、307、REJECT、REJECT-200、HEADER、SCRIPT |
| 重写目标或脚本 | 302、307、HEADER、SCRIPT 需要填写 |
| 脚本类型 | Request Header、Request Body、Response Header、Response Body |
URL 正则示例:
text
^https://api\.example\.com/v1/ads/.*
^https://www\.example\.com/old-path动作说明:
| 动作 | 效果 | 是否需要目标 |
|---|---|---|
302 | 临时重定向到目标 URL | 是 |
307 | 保持请求方法的临时重定向 | 是 |
REJECT | 拒绝请求 | 否 |
REJECT-200 | 返回空的 200 响应 | 否 |
HEADER | 内部转发到替换后的 URL,不向客户端返回 302/307 | 是 |
SCRIPT | 执行远程脚本 | 是 |
302、307 和 HEADER 的目标可以使用正则捕获组,例如 $1、$2。
Hostname 格式
HTTPS 重写只会对 hostname 列表中的域名尝试解密。
手动 hostname 支持每行一个或用逗号分隔:
text
api.example.com
*.example.com
buy.itunes.apple.com, *.googlevideo.com通配符示例:
| 写法 | 匹配 |
|---|---|
api.example.com | 只匹配这个域名 |
*.example.com | 匹配 example.com 和它的子域名 |
.example.com | 匹配 example.com 和它的子域名 |
导入重写模块
进入 设置 -> HTTPS 重写 -> 导入重写模块,可以粘贴模块内容或填写模块 URL。
模块格式兼容常见 Shadowrocket 风格:
text
#!name=Example Rewrite
[MITM]
hostname = api.example.com, *.example.com
[URL Rewrite]
^https://api\.example\.com/v1/ads url reject-200
^https://api\.example\.com/old url 302 https://api.example.com/new
[Script]
Example Script = type=http-response, pattern=^https://api\.example\.com/v1, requires-body=true, script-path=https://example.com/script.js, timeout=10支持的模块段落:
| 段落 | 支持内容 |
|---|---|
[General] | force-http-engine-hosts |
[MITM] | hostname |
[URL Rewrite] | 302、307、reject、reject-200、header |
[Map Local] | 仅支持 data="" status-code=200,会转换为 REJECT-200 |
[Script] | type=http-request、type=http-response |
[Rule] | 仅支持 UDP 的 REJECT 或 REJECT-DROP 路由规则 |
[Script] 规则必须包含:
text
type=http-request 或 type=http-response
pattern=URL 正则
script-path=https://example.com/script.js可选参数:
text
requires-body=true
binary-body-mode=true
argument=key=value
max-size=2097152
timeout=10WARNING
导入模块时,不支持的规则会被跳过。导入完成后建议打开对应分组检查 hostname、Rewrite/Script 和 Rule 数量。