Skip to content

HTTPS 重写

HTTPS 重写用于按规则重定向、拦截、改写请求或执行脚本。

iOS 上可以做什么

在 iOS 上,HTTPS 重写可以配合可信规则或模块使用,常见用途包括:

  • 拦截广告、追踪和统计请求,减少应用内无关内容。
  • 对指定 URL 做重定向,例如替换接口地址或修正失效链接。
  • 执行请求或响应脚本,用于接口调试、自动化处理和自定义响应。

DANGER

HTTPS 重写会让 Nextin 对指定域名进行 HTTPS 解密。只导入你信任的规则,只对必要的 hostname 开启重写。

开启前条件

使用 HTTPS 重写前需要满足:

  1. 已安装并完全信任 Nextin 的本机 CA 证书。
  2. 已添加至少一条重写规则或导入重写模块。
  3. 代理模式为 规则 模式。
  4. 需要重写的域名已填写到 hostname 列表中,或导入模块中包含 hostname。

如果证书未被完全信任,启用 HTTPS 重写 开关无法开启。

如果开关仍然无法开启,可以查看 HTTPS 重写开关打不开

安装并信任 CA 证书

  1. 打开 Nextin。
  2. 进入 设置
  3. 打开 HTTPS 重写
  4. 点击 生成并安装 CA 证书
  5. Nextin 会打开浏览器下载本机根证书。
  6. 回到 iOS 系统设置,进入 设置 -> 通用 -> VPN 与设备管理
  7. 已下载描述文件 中找到未安装的 Nextin 证书,点进去完成安装。
  8. 再进入 设置 -> 通用 -> 关于本机 -> 证书信任设置
  9. 找到 Nextin HTTPS Rewrite Root CA
  10. 打开完整信任。
  11. 回到 Nextin 的 HTTPS 重写 页面,等待状态变为已信任。

证书私钥只保存在本机 Keychain 中,不会同步到 iCloud。

安装后状态没有变为已信任时,可以查看 HTTPS 重写开关打不开

手动添加重写规则

进入 设置 -> HTTPS 重写 -> 添加重写规则

一条规则通常包含:

字段说明
名称可选,方便识别
匹配URL 正则表达式,匹配完整请求 URL
动作302307REJECTREJECT-200HEADERSCRIPT
重写目标或脚本302307HEADERSCRIPT 需要填写
脚本类型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执行远程脚本

302307HEADER 的目标可以使用正则捕获组,例如 $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]302307rejectreject-200header
[Map Local]仅支持 data="" status-code=200,会转换为 REJECT-200
[Script]type=http-requesttype=http-response
[Rule]仅支持 UDP 的 REJECTREJECT-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=10

WARNING

导入模块时,不支持的规则会被跳过。导入完成后建议打开对应分组检查 hostname、Rewrite/Script 和 Rule 数量。