rewrite 主要功能就是实现url的重写,nginx的rewrite规则采用PCRE(Perl Compatible Regular Expressions) Perl兼容正则表达式的语法进行规则匹配,如果需要nginx的rewrite功能,在编译nginx之前,需要编译安装PCRE库
例:
if ($http_user_agent ~ MSIE) {
   rewrite ^(.*)$ /msic/$1 break;        #当用户代理为IE浏览器,则跳转至/msic/目录下
}
if (! -f $request_filename) {
   rewrite ^/img/(.*)$ /site/$host/p_w_picpaths/$1 last;    #当用户请求的/img/下的某文件不存在,则跳转到/site/$host/p_w_picpaths/目录下
}
rewrite语法规则:
变量名可以使用“=”或“!=”运算符
"~"符号表示区分大小写字母的匹配
"~*"表示不区分大小写字母的匹配
"!~"和"!~*"与"~" "~*"相反
"-f"和"!-f"用来判断文件是否存在
"-d"和“!-d”判断目录是否存在
"-e" 和"!-e"判断文件或目录是否存在
"-x" "!-x"判断文件是否可执行
也支持$1~$9位置化参数
return指令:
location ~ .*\.(sh|bash)?$ {
   return 403;                            
}
#如果访问的url以"*.sh" "*.bash"结尾,则返回403
if ($host ~* ^(.*?)\.aaa\.com$) {
   set $var_tz '1';
}
if ($host ~* ^192\.168\.1\.(.*?)$) {
   set $var_tz '1';
}
if ($host ~* ^localhost) {
   set $var_tz '1';
}
if ($var_tz !~ '1') {
   rewrite ^/(.*)$     redirect;
}
#如果访问的url非*.aaa.com和192.168.0.* 及localhost ,则重定向到
flag标记:
last:    相当 于apache里的[L]标记,表示完成rewrite
break:    本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect:    返回302临时重定向,浏览器地址栏会显示跳转后的url地址
permanent:    返回301永久重定向,浏览器地址栏会显示跳转后的url地址
last和break用来实现uri重写,浏览器地址栏url地址不变
redirect和permanent用来实现url重写,浏览吕地址栏会显示跳转后的url地址
一般在根location中(即location / {...})或直接在server标签中编写rewrite规则,推荐使用last标记,在非根location中(location /cms/ {....}),则使用break标记
e.g.
location /cms/ {
   proxy_pass http://test.yourdomain.com;
   rewrite "^/cms/(.*)\.html$" /cms/index.html break;
}
实例:
location / {
   rewrite ^/data/?$    /bbs/ last;    将/data目录重定向到/bbs/
}
防止盗链:
location ~* \.(gif|jpg|png|swf|flv)$ {
   valid_referers none blocked *.test.com;
   if ($invalid_referer) {
       rewrite ^/(.*)    http://www.test.com/error.html;
   }
}
域名跳转:
#将所有对 的访问跳转到www.test.com
server {
   listen 80;
   server_name www.test.com;
   index index.html index.php
   root /export /home/www
   if ($host = "www.abc.com") {
       rewrite ^/(.*)$ http://www.test.com/$1 permanent;
   }
}

linux交流群:22346652。欢迎Linux爱好者加入,一起学习,一起进步。