Com três regras, você pode corresponder aos casos de exemplo e às seguintes versões dos widgets:
rewrite ^\/widget\/(v\d+)\/?(\?act=)?(.*)$ /widget/$1.php?act=$2 last;
rewrite ^\/widget\/?$ /widget/index.php last;
rewrite ^\/widget\/?(\?act=)?(.*) /widget/index.php?act=$2 last;
Eu escrevi isso usando um testador de regexp online, mas não configurei um ambiente de teste com o Nginx.
A primeira regra corresponderá a todos os casos com um número de versão, cobrindo com ou sem barra e com ou sem o argumento? act.
A segunda regra cobrirá a chamada básica do widget sem nenhum argumento, novamente com e sem barra final.
A última regra abrangerá todas as chamadas de widget sem versão, cobrindo com ou sem barra e com ou sem o argumento ?act
.
A ordem de duas últimas regras é importante.