location / {
if ($query_string ~ "(^|&)q\=($|&)"){
if ($query_string ~ "(^|&)p\=([0-9]({1,})($|&)"){
rewrite ^/$ /page/$2? redirect;
}
}
}
но тут использование if не сама лучшая идея
Может вам имеет смысл в 404.php засунуть редирект на пыхе
Во первых вы не потеряете в скорости поскольку редиректы будут срабатывать только если 404, соответственно не будут нагружать сервер в пустую
Второе редиректы на пыхе проще чем на nginx