match URL into $ with ^/dir/(.*)\.php
if matched then
set URL=/newpath/$1.html
endif
其意义非常明确,如果匹配,就做什么操作。这里相对Apache的重写来说,也有一个好处,做什么操作这个地方,可以有多行操作(当然,Apache也可以接连的执行重写规则,但是和这里是不同的)。一行一行的写,看起来至少容易理解。而且它要求必须是一行一个操作。
ENV 字符串数组,包含操作系统的变量,可以设置值或者添加新的值,它是只写的。
IN 字符串数组,包含HTTP请求头信息,可被重写改变头信息
OUT 字符串数组,在请求完成时,它保存发送给用户的HTTP头信息;初始是空的。它是只写的。
SCRATCH 字符串数组,可以用来保存临时数据,请求结束时,数据清空。
NOTES 字符串数组,可以用来存储备注信息,可以用来保存到日志,也可以通过API被程序读取操作
BODY 用于替换发送给用户的页面内容,发送之后Zeus就会断开连接,它是只写。
RESPONSE 如果BODY设置了,它可以设置为发给客户端的HTTP响应代码。
Zeus的关键字也就是指令,包含以下指令:
QUOTE:
match指令 匹配操作,语法如下:
[insensitive] match 变量 into 数组 with 正则表达式
insensitive 表示注意大小写,可以不用,则不区分大小写
变量 可以是前面列出的任何可被读取的变量
数组 表示匹配之后的结果保存的数组,只能是$或者%,根据配分组为$1...%1...
正则表达式 用于匹配的正则表达式
look for (dir|file) at URL相对网址
dir 检查是否为目录
file 检查是否为文件
URL相对网址 和前面的相同,从网站根目录算起的。也可以使用一个变量
如果检查成功,则exists标志被置为true,否则为false,然后可用在if指令中控制流程。
有一点需要说明的就是:look了之后,前面的matched标志将会无效,除非再次match;反之,match也会使得exists标志无效
#将当前网站的根目录读取到SCRATCH:documentroot之中
map path into SCRATCH:documentroot from /
#匹配当前网址中是否有字符a
match URL into $ with a
#如果匹配到了,则
if matched
#匹配网址中是否有字符b
match URL into $ with b
#如果匹配到了,则
if matched
#检查当前请求的网址,是不是一个实际存在的文件
look for file %{SCRATCH:documentroot}/%{URL}
#如果文件存在,则
if exists then
#将网址重写到/yes_a_yes_b.php,并且传递一个变量,file为1
set URL = /yes_a_yes_b.php?file=1
else
#将网址重写到/yes_a_yes_b.php,并且传递一个变量,file为0
set URL = /yes_a_yes_b.php?file=0
endif
else
set URL = /yes_a_not_b.php
endif
else
match URL into $ with b
if matched
#将网址对应文件的mime类型读取出来
map mime into SCRATCH:mimetype from URL
#将网址重写,并把mime类型作为参数传递
set URL = /not_a_yes_b.php?mimetype=%{SCRATCH:mimetype}
else
set URL = /not_a_not_b.php
endif
endif