Surge 可以对被接管的网络请求和响应进行修改,修改方式主要分为 Rewrite 和脚本,Rewrite 功能不如脚本灵活强大,但执行开销远低于脚本,所以一般简单的需求建议用 Rewrite 完成。

Rewrite(重写)功能用于 URL 重定向、修改请求 Header,或者用本地文件映射模拟服务器的 API 请求返回静态数据。

该功能只能对 HTTP 请求生效,使用 MITM 解密后也可用于 HTTPS,Raw TCP 请求会忽略该功能。

1. URL 重定向


URL 重定向是指将客户端发出的请求的 URL 重定向到另一个 URL,主要有三种模式,分别为 header、302(307)以及 reject 模式。语法为:正则表达式替代内容模式

1.1 header 模式

Surge 接收到请求后,会直接修改请求的 URL 以及请求头的 HOST 字段来实现的重定向。

这种重定向不是客户端自己完成的,所以客户端是察觉不到的,例如浏览器的某一请求命中了该重定向,即使重定向完成了浏览器地址栏还是会显示旧的 URL。

[URL Rewrite]
^http://www\\.google\\.cn <http://www.google.com> header

1.2 302、307 模式

Surge 接收到请求后,会直接给客户端返回一个 302(307)响应,客户端根据响应头的 Location 字段自行进行重定向请求,所以和 header 模式不同,客户端是知道这次重定向的。

302 和 307 模式基本一样,但 302 对一个 POST 请求可能会重定向为 GET 请求,所以对 POST 请求的重定向一般用 307 模式。

[URL Rewrite]
^http://www\\.google\\.cn <http://www.google.com> 302

1.3 reject 模式

Surge 接收到请求后,会直接给客户端返回一个「503 服务不可用」的响应,基本和内置的 REJECT 策略一致。

[URL Rewrite]
^http://www\\.google\\.cn - reject

1.4 注意事项