Isso acontece porque $1
vem da última expressão regular executada. Como map{}
é verificado depois da expressão regular em reescrita, o $1
vem da expressão regular especificada no mapa (e está vazia). Há um ticket 564 no nginx trac sobre isso - enquanto o comportamento é formalmente correto, é claramente contra-intuitivo e precisa ser mudado.
Como alternativa, você pode usar capturas nomeadas:
rewrite ^/(?<rest>.*)$ $redir_scheme://example.com/$rest redirect;
Ou, melhor ainda, use apenas return
com $ request_uri:
return 302 $redir_scheme://example.com$request_uri;