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
uri
GET 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âmetrouri
GET
Segundo conjunto de regras:
- Se o parâmetro
uri
estiver definido, ignore este conjunto de regras para evitar um loop - Continue se o URI solicitado terminar em
.php
,.php4
ou semelhante (.php123
não seria redirecionado) - Redirecionar para
index.php
(talvez seja necessário alterar o destino) e definir o parâmetrouri
GET
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 ).