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