nginx 重写
rewrite指令可在 server 块或者 location 块中配置。
语法:
rewrite regex replacement [flag];
1、rewrite 接收的 uri 不包含 host 地址,不包含参数。可通过全局变量$uri、$args获取。
2、flag:last、break、redirect、permannet
last:中止在本location块中处理接收到的URI,并将此处重写的URI作为一个新的URI,使用其他 location 块进行处理。让所有的location块重新匹配和处理新的URI。
break:将重写后的URI作为一个新的URI,在本块中继续进行处理。将重写后的地址在当前的location块中执行,不会将新的URI转向到其他location块。新的URI始终在同一个location块中。
redirect:302临时重定向。
permanent:301永久重定向。
3、rewrite_log
rewrite_log on; 开启URL重写日志。以 notice 级别输出到 error_log指令配置的日志文件中。
通过重写防盗链:
1 server{ 2 listen 80; 3 server_name www.test.com; 4 location ~* ^.+\.(gif|jpg|png)${ 5 valid_referers none blocked server_name *.test.com; 6 if($invalid_referer){ 7 rewrite ^/ http://www.test.com/images/forbidden.png; 8 } 9 } 10 }
valid_referer指令设置有效的 referer,若referer有效则设置$invalid_referer为1,否则为0;
none表示没有referer;
blocked表示referer被防火墙或者代理服务器删除或伪装;
server_names设置一个或多个URL。