Rewrite模块:
用来执行URL重定向。这个机制有利于去掉恶意访问的url,也有
利于搜索引擎优化(SEO)。
Nginx使用的语法源于Perl兼容正则表达式(PCRE)库,基本语法如下:
^ :必须以^后的实体开头
$ :必须以$前的实体结尾
. :匹配任意字符
[ ] :匹配指定字符集内的任意字符
[^ ] :匹配任何不包括在指定字符集内的任意字符串
| :匹配 | 之前或之后的实体
() :分组,组成一组用于匹配的实体,通常会有|来协助
n 捕获子表达式,可以捕获放在()之间的任何文本,比如:
^(.*)(hello|sir)$ 字符串为“hi sir” 捕获的结果: $1=hi $2=sir
这些被捕获的数据,在后面就可以当变量一样使用了
内部请求
外部请求是客户端的url,内部请求是Nginx通过特殊的指令触发。
比如:error_page、index、rewrite、try_files、include等等
内部请求分成两种类型
1:内部重定向:URI被改变,可能会匹配到其他的Location
2:子请求:比如使用Addition模块,指令add_after_body允许你在原始的URI之
后指定一个URI,会把该URI被处理后的结果,插入到原始的URI的body中。
内部重定向示例:
server {
server_name sishuok.com;
location /abc/ {
rewrite ^/abc/(.*)$ /bcd/
}
location /bcd/{
internal;
root pages;
}
}
条件结构的基本语法:
1:没有操作符:指定的字符串或者变量不为空,也不为0开始的字符串,取true
2:= , != ,例:if($request_method = POST){…}
3:~,~*,!~,!~* ,例:if($uri ~* “\.jsp$”){…}
4:-f,!-f :用来测试指定文件是否存在,例:if(-f $request_filename){…}
正则表达式的一部分可以用圆括号,方便之后按照顺序用$1-$9来引用。
示例配置:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/ break;
}
if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
set $id ;
}
if ($request_method = POST ) {
return 405;
}
if (!-f $request_filename) {
break;
proxy_pass http://127.0.0.1;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
if ($args ~ post=140){
rewrite ^ http://example.com/ permanent;
}
内置变量$invalid_referer用指令valid_referers指定。
5:-d,!-d :用来测试指定目录是否存在
6:-e,!-e:用来测试指定文件、目录或者符号链接是否存在
7:-x,!-x:用来测试指定文件是否存在和是否可以执行
8:break:跳出if块
使用字段:server, location, if
完成当前设置的规则,停止执行其他的重写指令。
9:return:终止处理,并返回一个指定的http状态码
这个指令结束执行配置语句并为客户端返回状态代码,可以使用下列的值:204,400,402-406,408,410, 411, 413, 416与500-504。此外,非标准代码444将关闭连接并且不发送任何的头部。
10:set:初始化或者重定义一个变量