Tener problemas con la aplicación inconsistente de las reglas mod_rewrite

Tener problemas con la aplicación inconsistente de las reglas mod_rewrite

Así que me pidieron que limpiara las URL de la aplicación web que estamos ejecutando actualmente en Apache (versión 2.4.9 si está interesado), pero después de jugar con los comandos mod re_write durante unas horas, creo que Estoy corriendo en círculos. Esto es lo que estoy intentando hacer.

Si la URL es algo como esto (http://www.foo.bar/admin/index.php), haga que se muestre comohttp://www.foo.bar/admin

Si la URL es algo como esto (http://www.foo.bar/admin/testpage.php), haga que se muestre comohttp://www.foo.bar/admin/testpage

Si la URL es algo como esto (http://www.foo.bar/admin/testpage.php?id=15&foo=www), haga que se muestre comohttp://www.foo.bar/admin/testpage?id=15&foo=www

Hasta ahora tengo el punto donde se resuelve index.php... en su mayoría... y el segundo ejemplo se resuelve... a veces. Básicamente, el código que tengo parece muy inestable y solo se resuelve dos niveles hacia abajo en el árbol de archivos. Entonces me preguntaba si alguien aquí podría ayudarme con esto. esto es lo que tengo en el archivo vhost (porque no quería tener esto en cada directorio como un archivo .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]

Respuesta1

Algo como esto debería funcionar :

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

Editar: la primera regla podría reemplazarse por esta, que es más sencilla:

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

p.ej :

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

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

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


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

Regla coincidente =RewriteRule \.php $1

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


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

Regla coincidente =RewriteRule \.php $1

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

información relacionada