2012-03-09 20 views
9

tengo el siguiente reescritura en mi archivo .htaccess que elimina la extensión de los archivos .php, convirtiendo por ejemplo so.com/question.php a so.com/ pregunta..php extensiones con .htaccess sin romper DirectoryIndex

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

Sin embargo, esto también se rompe el comportamiento DirectoryIndex por defecto, en la que solo teclear el directorio redirigirá al archivo de índice en la carpeta, por ejemplo, so.com/answer displays so.com/answer/index.php

simplemente combinando el código anterior con DirectoryIndex index.php no conseguir ambos resultados.

Puede alguien me ayude a combinar estas dos funciones, o volver a escribir el código para excluir archivos index.php, que permita lograr el mismo resultado?

Respuesta

24

estoy pensando sólo tiene que verificar que el archivo existe antes de hacer la reescritura, de esa manera a dejar 404 y comportamientos DirectoryIndex intacta:

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

(no probado)

+0

Funciona perfectamente, gracias. – ajcw

+0

@ Timothée Groleau código agradable, ¿hay alguna opción para eliminar 'index.php' de la página principal? – Muhammed

+0

Gracias compañero, esto funciona como un encanto :) – jycr753

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

verificar archivos y carpetas y, además, agregar RewriteBase/

+1

Esto da un error interno del servidor :( – ajcw

+0

extraño ... se agrega también el motor? :) – Crsr

+0

Sí, incluí 'RewriteEngine On' :) – ajcw