nginx重写模块

参考: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
#相当于换个目录

  

 

posted @ 2018-06-27 14:17  jabbok  阅读(514)  评论(0编辑  收藏  举报