Elimine las extensiones .php con .htaccess sin romper DirectoryIndex

Tengo la siguiente reescritura en mi archivo .htaccess que elimina la extensión .php de los archivos, convirtiendo por ejemplo so.com/pregunta.php a so.com/pregunta.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Sin embargo, esto también rompe el comportamiento predeterminado de DirectoryIndex, en el que simplemente escribir el directorio redirigirá al archivo de índice en la carpeta, por ejemplo so.com/respuesta pantallas so.com/answer/index.php

Simplemente combinando el código anterior con DirectoryIndex index.php no logra ambos resultados.

¿Alguien puede ayudarme a combinar estas dos funciones o reescribir el código para excluir los archivos index.php, lo que lograría el mismo resultado?

preguntado el 09 de marzo de 12 a las 14:03

3 Respuestas

Estoy pensando que solo necesita verificar que el archivo existe antes de hacer la reescritura, de esa manera dejará intactos los comportamientos de 404 y del índice de directorio:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

(no probado)

respondido 09 mar '12, 14:03

Buen código de @Timothée Groleau, ¿hay alguna opción para eliminar 'index.php' de la página de inicio? - Misuri

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L, QSA]

verificar archivos y carpetas y también, agregar RewriteBase /

respondido 09 mar '12, 14:03

Este da un error interno del servidor :( - ajcw

extraño ... ¿también agregas el motor encendido? :) - Crsr

Sí, incluí RewriteEngine On :) - ajcw

@Crsr, solo como un punto del que no escapas . en el 1er argumento de una cond. :- - TerryE

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

Probé y está funcionando bien.

Respondido el 19 de enero de 19 a las 06:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.