Skip to content
On this page

捕捉与搜索 rule && search

你需要学会yaml...如果不会的话,菜鸟教程可以帮你快速入门

在ClientWorker中,规则被分为catch_rulestransform_rulescatch_rules是匹配规则,只能匹配路由。 transform_rules只会在catch_rules起作用时才会捕获,可以捕获url statusText statusCode,未来将支持headerbody.

catch_rules

rule

作为路由匹配入口,catch_rule在匹配rule成功后才会将整个Request移交给transform_rules

catch_rules:
    - rule: #捕获规则1
      transform_rules:
        - search: #转换规则1
          #转换操作1
        - search: #转换规则2
          #转换操作2
    - rule: #捕获规则2
      transform_rules:
        - search: #转换规则3
        #转换操作3
        - search: #转换规则4
        #转换操作4

catch_rule是一个数组,ClientWorker会从上到下依次匹配,即越靠前的优先级越高。除非遇到returnredirect操作,否则不会结束匹配。

catch_rule必须是正则,如果不是,将会抛出错误。

语法糖

_

catch_rule_ 将会匹配当前网站的主域名(包括端口),例如:

  • http://www.example.com 将会匹配得 www.example.com
  • http://www.example.com:8080 将会匹配得 www.example.com:8080
  • http://www.example.com/test/ 将会匹配得 www.example.com

_不是匹配当前请求的域名,而是匹配当前网站的主域名。

如果你要捕获所有请求,请使用.*

transform_rules

作为转换入口,transform_rules在匹配search成功后才会进行处理,格式如下:

- rule: #捕获规则
  transform_rules:
  - search: #转换规则1
    action: #转换操作1
    {{action option}}: #转换操作1的参数
  - search: #转换规则2
    replace: #转换操作 - 重写路由

每一个路由分为searchaction两个部分,search是匹配规则,action是转换操作。如果search匹配成功,action就会被执行。当action执行完毕后,transform_rules会继续匹配下一个规则。

transform_rules是一个数组,ClientWorker会从上到下依次匹配,即越靠前的优先级越高。除非遇到returnredirect操作,否则不会结束匹配。

如果当前请求未执行fetch操作,status statusText是无法修改的,对header的修改将会作用于Request对象。如果当前请求已经执行fetch操作,status statusText是可以修改的,但replace将无法作用于重写路由,对header的修改将会作用于Response对象。return redirect操作将会终止匹配,无视fetch是否完成,直接返回结果。

同样的,transform_rules也是一个数组,ClientWorker会从上到下依次匹配,即越靠前的优先级越高。

语法糖

_

transform_rules_的作用是使用与catch_rule相同的规则,而不是匹配当前域名。

  • catch_rule_,那么transform_rules中的_就会同时匹配当前网站的主域名,而不是当前请求的域名。

  • catch_rule.*,那么transform_rules中的_也会同时匹配整条网址,即捕获全部请求。

searchin

指定search的搜索内容,可以为:

  • url:匹配当前请求的url[默认]
  • status:匹配当前请求的状态码
  • statusText:匹配当前请求的状态文本