Respondendo suas perguntas em ordem ...
Isso
rewrite ^/old-category/(.*) /new-category/$1;
e isso
rewrite ^/old-category/(.*)$ /new-category/$1;
como escrito são equivalentes. A regra .*
corresponde a 0 ou mais de "tudo", portanto, o $
é redundante / não é realmente necessário.
O $
terminator é útil quando você quer combinar strings que terminam de um modo específico , por exemplo
rewrite ^/old-category/(.*)\.php$ /new-category/$1;
para reescrever somente arquivos PHP .
Quanto à sua segunda pergunta, se entendi corretamente, você deseja redirecionar isso
http://example.com/old-category/
para isso
http://example.com/new-category/
Se for o caso, isso já é feito pela regra rewrite
, pois .*
corresponde a ZERO ou mais caracteres.