Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove .php extensions with .htaccess without breaking DirectoryIndex

I have the following rewrite in my .htaccess file which removes the .php extension from files, converting for example so.com/question.php to so.com/question.

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

However this also breaks the default DirectoryIndex behaviour, in which just typing the directory will redirect to the index file in the folder, e.g. so.com/answer displays so.com/answer/index.php

Simply combining the above code with DirectoryIndex index.php does not achieve both results.

Can someone help me combine these two functions, or rewrite the code to exclude index.php files, which would achieve the same result?

like image 839
ajcw Avatar asked Mar 09 '12 14:03

ajcw


2 Answers

I'm thinking you just need to verify that the file exists prior to doing the rewrite, that way you'll leave 404 and directoryindex behaviours intact:

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

(not tested)

like image 176
Timothée Groleau Avatar answered Nov 01 '22 00:11

Timothée Groleau


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

verify files and folder and also, add RewriteBase /

like image 39
Crsr Avatar answered Nov 01 '22 02:11

Crsr