参考:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
1 语法
Syntax: if (condition) { ... }
Default: —
Context: server, location
Syntax: return code [text]; return code URL; return URL; Default: — Context: server, location, if
Syntax: rewrite regex replacement [flag]; Default: — Context: server, location, if
Syntax: break; Default: — Context: server, location, if
Syntax: set $variable value; Default: — Context: server, location, if
2 测试
2.1 精确匹配/return code
if ($remote_addr = 10.224.32.114){
return 403;
}
#访问ip精确匹配,则403
2.2 正则匹配/rewrite
if ($http_user_agent ~* chrome){
rewrite ^/(.*)$ /chrome.html break;
}
#如果UA不区分大小写匹配到chrome,则uri重写到/chrome.html,然后跳出
#如果不跳出,client下面就会访问/chrome.html,然后被循环重写,会500报错
2.3 是否存在/fastcgi_para
if (!-e $document_root$fastcgi_script_name){
rewrite ^/(.*)$ /404.html break;
}
#请求的路径+文件名不存在,重写到404.html
2.4 设定变量
if ($http_user_agent ~* chrome){
set $client 1;
}
if ($http_user_agent ~* firefox){
set $client 2;
}
if ($client = 1){
rewrite ^/(.*) /chrome.html break;
}
if ($client = 2){
rewrite ^/(.*) /firefox.html break;
}
#不同的UA,给变量设定不同的值,然后根据不同的值,给出不同的重定向
3 反向引用
location /test {
rewrite ^/test/(.*)$ /new_test/$1 break;
}
#$1就是()里的内容
#比如/test/xx.html,就会把xx.html传递给$1,就是重写到/new_test/xx.html
#相当于换个目录