config.yaml 语法
- OPTION: ARG1 ARG2 ...
- OPTION: if (CONDICTIONs) ACTION
CONDITION可以是以下任意一种: 使用 == 和 != 运算符比较变量和字符串;
使用 ~ (大小写敏感)和 ~* (大小写不敏感)运算符匹配变量和正则表达式。正则表达式可以包含匹配组,匹配结果后续可以使用变量%1..%9引用(正则匹配使用 PCRE 库,你可以在其主页或者 Wikipedia 找到其语法相关文档);
使用 > 、 >= 、 < 、 <= 比较变量和数字的大小;
使用 -f 和 !-f 运算符检查文件是否存在;
使用 -d 和 !-d 运算符检查目录是否存在;
使用 -e 和 !-e 运算符检查文件、目录是否存在;
%{REQ:HEADER_NAME} HTTP请求头中的字段,如%{REQ:HTTP_HOST}
%{RESP:HEADER_NAME} HTTP响应头中的字段,如%{RESP:CONTENT_ENCODING}
%{QUERY_STRING} 查询串,一般是url中问号后面的内容
%{REQUEST_URI} 请求路径,即用户请求的url去掉主机部分和查询串后剩下的部分
目录默认页面:index.php
自定义错误页面:404html
是否启用压缩:按条件,根据回应的内容长度,请求来源,请求REQUEST_URI地址,
URL重写:
# 强制使用https访问
- rewrite: if (%{REQ:X-Forwarded-Proto} != "https") goto "https://%{HTTP_HOST}%{REQUEST_URI}" # 当 url 匹配 urldir/(.*) ,并且 输入 header referer 等于 sina 时,跳转至页面 /usr/$,$ 表示刚刚匹配的 urldir/(.*) 中的 (.*) 部分。
- rewrite: if (%{REQUEST_URI} ~ "urldir/(.*)" && %{REQ:REFERER} == "sina") goto "/url/$1" # 当 url 匹配 urldir/(.*),并且请求的是一个目录时,跳转至 /url/$
- rewrite: if (-d && %{REQUEST_URI} ~ "urldir/(.*)") goto "/url/$1" # 当 url 匹配 path,并且请求的不是一个文件时,跳转至 /url/query.php
- rewrite: if (!-f && %{REQUEST_URI} ~ "path") goto "/url/query.php" # 当查询串等于so,并且 url 以 zhaochou 结尾时,跳转至 /url/%,% 表示 query_string 匹配到的部分。
- rewrite: if (%{QUERY_STRING} ~ "^(so)$" && %{REQUEST_URI} ~ "zhaochou$") goto "/url/%1" # 当查询串不包含sohu,并且 url 以zhaochou结尾时,跳转至/url/query.php?%{QUERY_STRING},%{QUERY_STRING}表示查询串。
- rewrite: if (%{QUERY_STRING} !~ "sohu" && %{REQUEST_URI} ~ "zhaochou$") goto "/url/query.php?%{QUERY_STRING}" # 如果 url 既不是文件,也不是目录,跳转至 index.php?%{QUERY_STRING}
- rewrite: if (!-d && !-f) goto "/index.php?%{QUERY_STRING}"
回应指定过期时间
回应指定头部信息
访问控制
# 对cron任务保护,防止被外部抓取,我们将cron任务放在cron目录下(sae中cron服务执行时,走的是内部网络)
- hostaccess: if (%{REQUEST_URI} ~ "/cron/") allow "10.0.0.0/8" 允许10打头的所有IP- hostaccess: deny "127.0.0.1"# 禁止127.0.0.1 的所有访问(这个要慎用)
# 对于屏蔽一组IP地址,可以写成子网掩码形式,或者将多个IP之间加以空格。子网掩码形式如下:
- hostaccess: if (%{REQUEST_URI} ~ "/cron/") deny "108.192.8.0/24" 屏蔽108.192.8打头的所有IP
http基础认证
# 用户的网站后台程序都放在admin目录下,需要对admin目录做密码保护
- passwdaccess: if (%{REQUEST_URI} ~ "/admin/") passwd "admin:admin123" 这个和index.php重写一起用