# 指令学习 ## if ```bash == 等值比较; ~ 与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写 ~* 与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写 !~ 与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写 !~* 与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写 -f, !-f 判断指定的路径是否为存在且为文件 -d, !-d 判断指定的路径是否为存在且为目录 -e, !-e 判断指定的路径是否存在,文件或目录均可 -x, !-x 判断指定路径的文件是否存在且可执行 ``` ## location ```bash = 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。 ~ 区分大小写匹配(可用正则表达式) !~ 区分大小写不匹配 ~* 不区分大小写匹配(可用正则表达式) !~* 不区分大小写不匹配 ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。 ``` ## proxy_、upstream ## rewrite ```bash rewrite ^/(.*)$ http://example.com/$1 permanent; rewrite break url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变 rewrite last url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变 rewrite redirect 返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url(因为是临时) rewrite permanent 返回301永久重定向, 地址栏显示重定向后的url,爬虫会更新url ``` # 实例 ```nginx location = / { # 只匹配 / 查询。 } location / { # 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。 } location ^~ /p_w_picpaths/ { # 匹配任何已 /p_w_picpaths/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。 } location ~*.(gif|jpg|jpeg)$ { # 匹配任何已 gif、jpg 或 jpeg 结尾的请求。 } ``` # 参考 * [搞懂nginx的rewrite模块](https://segmentfault.com/a/1190000008102599)