O primeiro de todos: o uso de if é desencorajado pelo autor do Nginx por uma boa razão: ele tem efeitos colaterais muito desagradáveis. Você ainda pode usá-lo em casos de uso simples, mas usar if e rewrite simultaneamente é como uma bomba.
Seu caso de uso pode ser facilmente implementado usando duas seções server :
server {
server_name domain.com;
rewrite ^ /index.php?/$request_uri last;
}
server {
server_name ~ ^(?<SUB>.+)\.domain.\com$ ;
rewrite ^ /index.php?/$SUB/$request_uri last;
}