2012-03-09 4 views
9

Ho la seguente riscrittura nel mio file .htaccess che rimuove l'estensione .php da file, ad esempio la conversione di so.com/question.php-so.com/ domanda.Rimuovere .php estensioni con .htaccess senza rompere DirectoryIndex

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

Tuttavia questo rompe anche il comportamento di default DirectoryIndex, in cui semplicemente digitando la directory reindirizza al file registro nella cartella, per esempio so.com/answer display so.com/answer/index.php

semplicemente combinando il codice precedente con DirectoryIndex index.php non raggiungere entrambi i risultati.

Qualcuno può aiutarmi a combinare queste due funzioni, o riscrivere il codice per escludere i file index.php, che otterrebbero lo stesso risultato?

risposta

24

sto pensando è sufficiente verificare che il file esiste prima di fare la riscrittura, in questo modo si Lascerai 404 e comportamenti DirectoryIndex intatta:

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

(non testato)

+0

Funziona perfettamente, grazie. – ajcw

+0

@ Timothée Groleau bel codice, c'è qualche opzione per rimuovere 'index.php' per la home page? – Muhammed

+0

grazie amico, questo funziona come un fascino :) – jycr753

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

verificare i file e la cartella e anche, aggiungere RewriteBase/

+1

Questo dà un errore interno del server :( – ajcw

+0

strano ... si aggiunge anche il motore? :) – Crsr

+0

Sì, Ho incluso 'RewriteEngine On' :) – ajcw