1. if 语法:
a) 在server里面进行 if(){}这样的条件判断,比如我们匹配一个 ip 并返回值:(记得在 if ( ){}的时候要留有空格,不然会包unknow ...)
要留意的是: 如果下面还有一个server的话,就算你在if 里面用了break ,return ,系统还是会往下匹配的,然后返回另外个server的location。
2.防盗链:
a) location ~ .*.(gif|jpg|jpeg|png|bmp|swf)${
valid_referers none blocked www.baidu.com www.ywnds.com;
if ($invalid_referer) {
return 404;
}
}
3.rewrite(重写)的重定向:
a) //如果query string中包含"post=140",则永久重定向到example.com
if ($args ~ post=140){
rewrite ^ http://example.com/ permanent;
}
b) rewrite一般是写入server, if , location 中的,rewrite都是在同个域名下进行跳转的,
例如 http://ywnds.com/a/we/index.php?id=1&u=str,只对/a/we/index.php重写,语法如上面所示。
例如 http://ywnds.com/a/we/index.php?id=1&u=str,只对/a/we/index.php重写,语法如上面所示。
c) rewrite 会进行正则的重写,然后在进行location循环匹配,最多循环10次
4.
全局变量
下面是可以用作if判断的全局变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$args #这个变量等于请求行中的参数,同$query_string;
$content_length #请求头中的Content-length字段;
$content_type #请求头中的Content-Type字段;
$document_root #当前请求在root指令中指定的值,如:root /var/www/html;
$host #请求主机头字段,否则为服务器名称;
$http_user_agent #客户端agent信息;
$http_cookie #客户端cookie信息;
$limit_rate #这个变量可以限制连接速率;
$request_method #客户端请求的动作,通常为GET或POST;
$remote_addr #客户端的IP地址;
$remote_port #客户端的端口;
$remote_user #已经经过Auth Basic Module验证的用户名;
$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成;
$scheme #HTTP方法(如http,https);
$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1;
$server_addr #服务器地址,在完成一次系统调用后可以确定这个值;
$server_name #服务器名称;
$server_port #请求到达服务器的端口号;
$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”;
$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”;
$document_uri #与$uri相同,例:http://localhost:88/test1/test2/test.php;
|
5. rewrite的具体浅出深入 ,可以查看:https://www.cnblogs.com/beyang/p/7832460.html