Tente isso como um ponto de partida:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} !\.(.*)
RewriteCond %{REQUEST_URI} !^/(framework|restricted)/
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} \.php.?$
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
Primeiro conjunto de regras:
- Não execute esta regra se o parâmetro
uriGET estiver definido (caso contrário, você obterá um loop ao redirecionar para o script de destino depois de anexar o parâmetrouri) - Se o URI contiver um
., ignore este conjunto de regras (talvez você queira criar uma regra mais específica para extensões específicas, mas isso funciona) - Se o URI estiver em um diretório restrito, ignore este conjunto de regras
- Redirecionar para
index.php(talvez seja necessário alterar o destino) e definir o parâmetrouriGET
Segundo conjunto de regras:
- Se o parâmetro
uriestiver definido, ignore este conjunto de regras para evitar um loop - Continue se o URI solicitado terminar em
.php,.php4ou semelhante (.php123não seria redirecionado) - Redirecionar para
index.php(talvez seja necessário alterar o destino) e definir o parâmetrouriGET
Não é necessário um "assistente" para colocar as regras do mod_rewrite juntas - passe algum tempo experimentando você mesmo e lendo o guia que o jscott recomendou.
Faça faça todas as suas perguntas do tipo teoria aqui, se quiser grandes explicações (em oposição a perguntas do tipo prático, em que parece que os respondentes estão obtendo o seu projeto em vez de aprofundar seu conhecimento ).