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