nginx中如何对变量进行除法操作?

例如,请求的url是

photos/100000_0_9-.jpg

我想要计算取出100000这个数字,对其进行除法操作

location ~ /photos/([0-9]+)_0_([0-9]+)-.jpg$ {
    root '/home/images';
    set $id $1/10000;
    set $version $2;
    rewrite /photos/([0-9]+)_0_([0-9]+)-.jpg$ /$id/$version/$1_0_$2-.jpg;
}

然后重写到该id对应的目录,但是这样操作的话,id的值会变成100000/10000,而不是10.

nginx中如何实现这种除法的操作?

阅读 9.5k
1 个回答

Nginx配置文件里似乎是不支持数据学运算的,可以使用agentzh编写的HttpLuaModule。

location ~ /photos/([0-9]+)_0_([0-9]+)-.jpg$ {
    root '/home/images';
    set $id $1;
    set $version $2;
    set_by_lua $id
               "return math.floor(tonumber(ngx.arg[1])/10000)"
                $id;
    rewrite /photos/([0-9]+)_0_([0-9]+)-.jpg$ /$id/$version/$1_0_$2-.jpg;
}

也可以字节写个简单的数学运算扩展 https://github.com/arut/nginx-let-mod...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏