Appconfig 配置规则

教程 3年前 (2014-04-04) 14,418 人围观 11

关于SAE的Appconfig 配置规则可能很多人像我一样不是很清楚怎么写的,好吧,今天就把收集到的规则,给大家整理一下

如果你使用过程中有什么问题,可以在下方回复告知我。

表达语法:

if 表达 执行规则

in_header["header_name"] op string_or_digit

out_header["header_name"] op string_or_digit

path op string

query_string op string

is_file()

is_dir()

解释是:
in_header 是请求头:
out_header 是响应头:
header_name 是 header 的名字:

op 是操作符,有  ~(正则匹配)  !~(正则不匹配)  ==(相等,用于字符串和数字) !=(不相等,用于字符串和数字) 
>, >=, <, <=(          比较操作符仅用于整形数字)

string 是形如 "xxxx" 的字符串 

string_or_digit 表示 string 或者 digit,根据 op 的种类,后面跟 string 或者 digit

path 是系统宏,表示用户请求的 url 去掉主机部分和查询串后剩下的部分

query_string 是系统宏,表示查询串,一般是url中问号后面的内容

is_file() 和 is_dir 是系统函数,判断 path 是文件还是目录,!is_file(),!is_dir() 分别是其否定形式。

目录默认页面

语法:- directoryindex: file_list

说明:
file_list 中各个文件名以空格分隔,directoryindex在 yaml 文件中仅有一项

示例:
- directoryindex: aaa.php bbb.html

自定义错误页面

语法:- errordoc: httpcode error_file

说明:
httpcode 是诸如 404,302 之类的http响应码,error_file 是服务器以 httpcode 响应请求时响应的文件。errordoc 在 yaml 中可以配置多项。

示例:
- errordoc: 404 /path/404.html
- errordoc: 403 /path/403.html

页面压缩

语法:- compress: if (single_express) compress

示例:
- compress: if(out_header["Content-Length"] >= 500) compress
- compress: if(in_header["Referer"] == "gphone") compress
- compress: if(path ~ "/big/") compress

URL重写

语法:- rewrite: if (complex_express) goto target_url

示例:
- rewrite: if(query_string ~ "^(so)$" && path ~ "zhaochou$") goto "/url/%1"
- rewrite: if(is_dir( ) && path ~ "urldir/(.*)") goto "/url/$1"
- rewrite: if( !is_file() && !is_dir()) goto "index.php?%{QUERY_STRING}"

 

设置页面过期时间

语法:
- expire: if (single_express) time seconds

说明:
在 expire 和 mime 中 single_express 表示单一的表达式,不能用 && 复合,in_header,path 都可以出现在 single_express 中,并且 op 只能是 ~ 或者 ==,即只支持正则匹配和字符串比较 seconds 是秒数,content-type 是表示文档类型的字符串。

示例:
- expire: if(in_header["referer"] ~ "sina") time 10

 

设置响头信息

语法:
- mime: if (single_express) type content-type

说明:
如果 url 请求文件的扩展名是 pdf2,设置 Content-Type 为 application/pdf
- mime: if(path ~ ".pdf2$") type "application/pdf"

只要请求 header referer 包含字符串 sina,就设置 Content-Type 为 text/plain
- mime: if(in_header["referer"] ~ "sina") type "text/plain"

 

基于主机的访问控制

示例:
禁止127.0.0.1 访问private目录
- hostaccess: if(path ~ "/private/") deny "127.0.0.1"

只允许127.0.0.1 访问.conf结尾的文件
- hostaccess: if(path ~ ".conf$") allow "127.0.0.1"

禁止127.0.0.1 的所有访问(这个要慎用)
- hostaccess: deny "127.0.0.1"

对cron任务保护,防止被外部抓取,我们将cron任务放在cron目录下(sae中cron服务执行时,走的是内部网络)
- hostaccess: if(path ~ "/cron/") allow "10.0.0.0/8"

说明:ip地址需要加引号,*代表所有IP地址,具体可以参考apache配置.allow是白名单方式,deny是黑名单

 

简单认证

示例:
访问secret目录需要密码,允许用户test用密码123qwe访问,用户coder用密码123asd访问
- passwdaccess: if(path ~ "/secret/") passwd "test:123qwe coder:123asd"

访问.text结尾的文件需要密码,允许用户writer用密码123zxc
- passwdaccess: if(path ~ ".text$") passwd "writer:123zxc"

所有访问都要密码,允许用户writer用密码123zxc访问
- passwdaccess: passwd "write:123zxc"

用户的网站后台程序都放在admin目录下,需要对admin目录做密码保护
- passwdaccess: if(path ~ "/admin/") passwd "admin:admin123"