nginx 提供的 rewrite功能使用nginx提供的全局变量或者自定义变量,结合正则表达式对url进行重写和重定向
eg:
location / {
# 重写规则信息
error_log logs/rewrite.log notice;
# 注意这里要用‘’单引号引起来,避免{}
rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4;
# 注意不能在上面这条规则后面加上“last”参数,否则下面的set指令不会执行
set $image_file $3;
set $image_type $4;
}
location /data {
# 指定针对图片的日志格式,来分析图片类型和大小
access_log logs/images.log mian;
root /data/images;
# 应用前面定义的变量。判断首先文件在不在,不在再判断目录在不在,如果还不在就跳转到最后一个url里
try_files /$arg_file /image404.html;
}
对于/images/ef/uh7b3/test.png 的请求根据 ,根据这个规则,
rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4; 其中 $3 对应着test $4 对于着 png
整理之后就会变成
/data?file=test.png 根据 匹配规则会匹配到 location /data 然后看 /data/images/test.png 是否存在,存在则返回,不存在返回404