A menos que você realmente precise do nome de usuário para algo, ou precise redirecionar apenas para o local exato e não haja subdiretórios, é extremamente simples - você realmente não precisa procurar o nome de usuário.
rewrite ^/p/(.*)$ /profile/$1 permanent;
Mas, para fins de argumentação, se você precisasse pegar o nome de usuário e, digamos, inserir algo entre o nome de usuário e o resto do caminho, poderia fazer algo assim:
rewrite ^/p/([^/]+)(.*)$ /profile/$1/usersite$2 permanent;
O primeiro par de parênteses irá capturar tudo depois de /p/
até (mas não incluindo) a seguinte barra; o .*
irá capturar o resto da string. Em seguida, eles são adicionados novamente em $1
e $2
- então /p/username/some-page.html
se torna /profile/username/usersite/some-page.html
.