经过官方文档能够看到,rewrite的做用上下文是 server location,能够写在 server里面 亦或location里面;html
命令:nginx
if (条件) {} 条件判断 set #设置变量 return #返回状态码 break #跳出rewrite rewrite #重写
条件:服务器
= 字符串比较 ~ 区分大小写正则 ~* 不区分大小写正则 -f 是否为文件 -d 是否为目录 -e 是否存在 ! 取反
例子:url
if ($requesy_method=POST) { return 405; } if ($http_user_agent ~ MSIE) { rewrite ^.*$ /ie.html; break;(若是不break,循环重定向) } 访问一个不存在的页面 /xxx.html if (!-e $document_root$fastcgi_script_name) { rewrite ^.*$ /404.html break ; # 晃眼一看以为这个地方不必break了,实际上这个地方仍是要加 break,不然循环重定向,解释: 服务器内部的rewrite和302跳转不同,跳转的话url都变了,变成从新http请求 404.html,而内部rewrite, 上下文没有变,就是说 fastcgi_script_name 任然是 xxx.html,所以 会循环重定向 } 若是是经过apt方式安装的nginx,可用的变量保存在 /etc/nginx/fastcgi_params set 举例 if ( $http_user_agent ~* msie ) { set $isie 1; } if ( $fastcgi_script_name = ie.html ) { set $isie 0; } if ( $isie 1 ) { rewrite ^.*$ ie.html; }