**if判断指令** 语法为`if(condition){...}`,对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容: * 当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false * 直接比较变量和内容时,使用`=`或`!=` * `~`正则表达式匹配,`~*`不区分大小写的匹配,`!~`区分大小写的不匹配 `-f`和`!-f`用来判断是否存在文件 `-d`和`!-d`用来判断是否存在目录 `-e`和`!-e`用来判断是否存在文件或目录 `-x`和`!-x`用来判断文件是否可执行 例如: ~~~ if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1 break; } //如果UA包含"MSIE",rewrite请求到/msid/目录下 if ($http_cookie ~* "id=([^;]+)(?:;|$)") { set $id $1; } //如果cookie匹配正则,设置变量$id等于正则引用部分 if ($request_method = POST) { return 405; } //如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302 if ($slow) { limit_rate 10k; } //限速,$slow可以通过 set 指令设置 if (!-f $request_filename){ break; proxy_pass http://127.0.0.1; } //如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查 if ($args ~ post=140){ rewrite ^ http://example.com/ permanent; } //如果query string中包含"post=140",永久重定向到example.com location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked www.jefflei.com www.leizhenfang.com; if ($invalid_referer) { return 404; } //防盗链 } ~~~