该ngx_http_rewrite_module模块用于使用PCRE正则表达式更改请求URI,返回重定向,以及有条件地选择配置。rewrite指令的功能就是,使用nginx提供的全局变量或本身设置的变量,而后结合正则表达式和标志位实现url重写以及重定向。
所以须要检查pcre是否安装 php
[root@]# rpm -q pcre pcre-8.32-17.el7.x86_64
语法 | break; |
---|---|
默认 | - |
应用位置 | server,location,if |
中止处理任何rewrite的相关指令。若是出如今location里面,那么全部后面的rewrite模块指令都不会再执行,也不发起内部重定向,而是直接用新的URI进一步处理请求。html
location = /testbreak { break; return 200 $request_uri; }
当uri中包含testbreak时,那么会中止执行后面的rewrite模块的命令,return属于rewrite模块。nginx
语法 | if (condition) { ... } |
---|---|
默认 | - |
应用位置 | server,location |
if ($request_method = POST ) { return 405; } if ( !-f $filename ) { break; }
中止处理并为客户端返回状态码,没有状态码的URL将被视为一个302状态码。
return语法正则表达式
语法 | return code [text];return code URL;return URL; |
---|---|
默认 | - |
应用位置 | server,location |
# return code [text]; location = /1 { return 200 "this is 1"; } # return code URL; location = / { return 302 http://www.wanger.com; } # return URL; location = / { return http://www.wanger.com; }
语法 | rewrite regex replacement [flag]; |
---|---|
默认 | - |
应用位置 | server,location,if |
rewrite ^(.*) http://wanger.com/$1 permanent;
若是()里的正则表达式与请求的URI匹配,那么URI将根据replacement字符串中的指定进行更改,匹配成功将跳转到http://wanger.com/$1 ,$1的值是前面()里的正则匹配到的值,然后面的permanent是永久重定向301的标志,当rewrite 后面没有任何 flag 时就顺序执行 json
flag标记 | 说明 |
---|---|
last | 本条规则匹配完成后继续匹配新的URI规则 |
break | 本条规则匹配完成后不在进行新的URI匹配 |
redirect | 302临时重定向,浏览器会显示跳转后的URL地址,当nginx 服务关闭的时候,将没法定向到特定的网站 |
permanent | 301永久重定向,浏览器会显示跳转后的URL地址,除非客户端清理浏览器缓存 |
last 和 break同样 它们都会终止此 location 中其余它rewrite模块指令的执行,last会从新将rewrite后的地址做为一个新的URI在server块中请求,而break会直接请求重写后的地址,并不会再进行新的请求浏览器
location ~ ^/break { rewrite ^/break /test/ break; } location ~ ^/last { rewrite ^/last /test/ last; } location /test/ { default_type application/json; return 200 '{"status":"success"}'; }
当我请求127.0.0.1/break时,浏览器返回的是404,由于break不会去请求/test/块,而网站根目录下test目录根本不存在,当我请求127.0.0.1/last时,浏览器返回的是{"status":"success"},由于last将地址重写后生成了新的请求,新的请求地址为/test/,而后与/test/块进行匹配,返回200状态码以及{"status":"success"}缓存
用于定义一个变量,变量的值能够包含文本,变量或者是它们的组合形式。安全
语法 | set $variable value; |
---|---|
默认 | - |
应用位置 | server,location,if |
location /wanger { # return 302 http://60.205.177.168/huazai; root html; index index.html; set $var1 "client address is "; set $var2 $remote_addr; return 200 "$var1$var2"; }
curl 127.0.0.1/wanger client address is 127.0.0.1
if ($host = "wanger.com"){ rewrite ^/(.*)$ http://www.wanger.com/$1 permanent; } if (!-f $request_filename) { rewrite ^/(.*) http://www.wanger.com/index.html; } if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?$1 last; }
欢×××陈师傅” app