Reescreva o URL com .htaccess para vários parâmetros

Esta questão pode ser uma duplicata. Mas eu não encontrei nenhuma solução trabalhada para mim. Eu quero rewrite URL, onde eu tenho um e dois parâmetros de nível. primeiro parâmetro é p e segundo é sp

www.domain.com/home deve apontar para www.domain.com/index.php?p=home e www.domain.com/projects/99 deve apontar para www.domain.com/index.php?p=projects&sp=99

Como faço no .htaccess?

Atualmente meu htaccess é como segue,

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?p=$1 RewriteRule ^([^/]*)/([^/]*)\$ index.php?p=$1&sp=$2 [L] 

O problema com esse htaccess é que ele aponta corretamente um URL de nível. ou seja, www.domain.com/home. Mas não o URL de dois níveis. ie. www.domain.com/projects/99

Você tem que tratar as regras separadamente. Todas as condições que precedem as regras só se aplicam a uma única regra. As regras a seguir não são tocadas por essa regra. Você tentou “encadear” duas regras. A segunda regra nunca poderia ter correspondido, já que a primeira foi uma captura que mudou a syntax. Além disso, você precisa garantir que a primeira regra não capture solicitações indesejadas. Pense também se você deseja usar o operador * ou o + nas expressões regulares. Eu sugiro que você use o operador + , para que você tenha uma mensagem de erro clara quando valores vazios forem solicitados para uma ‘página’ ou uma ‘subpágina’.

Então, isso pode se aproximar do que você está procurando:

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)$ index.php?p=$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/([^/]+)$ index.php?p=$1&sp=$2 [L]