Tendo problemas com aplicação inconsistente de regras mod_rewrite

Tendo problemas com aplicação inconsistente de regras mod_rewrite

Então, me pediram para limpar as URLs do aplicativo da web que estamos executando atualmente no Apache (versão 2.4.9, se estiver interessado), mas depois de brincar com os comandos mod re_write por algumas horas, acho que ' Estou correndo em círculos. Aqui está o que estou tentando fazer.

Se o URL for algo assim (http://www.foo.bar/admin/index.php), faça com que seja exibido comohttp://www.foo.bar/admin

Se o URL for algo assim (http://www.foo.bar/admin/testpage.php), faça com que seja exibido comohttp://www.foo.bar/admin/testpage

Se o URL for algo assim (http://www.foo.bar/admin/testpage.php?id=15&foo=www), faça com que seja exibido comohttp://www.foo.bar/admin/testpage?id=15&foo=www

Até agora eu cheguei onde o index.php resolve....principalmente.....e o segundo exemplo resolve....às vezes. Basicamente, o código que tenho parece muito instável e resolve apenas dois níveis abaixo na árvore de arquivos. Então, eu queria saber se alguém aqui poderia me ajudar nisso? aqui está o que eu tenho no arquivo vhost (porque eu não queria ter isso em todos os diretórios como um arquivo .htaccess)

AllowOverride None
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

Responder1

Algo assim deve funcionar:

RewriteRule ([^/]+)/(.*)/?index.php$ $1
RewriteRule \.php $1

Editar: A primeira regra poderia ser substituída por esta, que é mais direta:

RewriteRule (.*)/index\.php?$ $1

por exemplo :

URL=http://www.foo.bar/admin/index.php

Regra correspondente =RewriteRule ([^/]+)/(.*)/?index.php$ $1

Resultado:http://www.foo.bar/admin


URL=http://www.foo.bar/admin/testpage.php

Regra correspondente =RewriteRule \.php $1

Resultado =http://www.foo.bar/admin/testpage


URL=http://www.foo.bar/admin/testpage.php?id=15&foo=www

Regra correspondente =RewriteRule \.php $1

Resultado =http://www.foo.bar/admin/testpage?id=15&foo=www

informação relacionada