revive
revive

Reputation: 863

htaccess remove .php extension, index.php AND add trailing slash

This is for basic HTML/PHP pages, no query strings, etc.. I have searched high and low and find resources for removing the 'index.php' from the URI, or removing '.php' and other file extensions.. and even adding a trailing slash. But, everytime I try to use them all, or use examples that I have found, I get a 500 server error.

I may pass a query string on one page, but really I just want to remove 'index.php' from the index page and have all sub pages without the file extension. So, something like this:

domain.com/index.php to domain.com/ domain.com/page1.php to domain.com/page1/ domain.com/page2.php to domain.com/page2/ domain.com/page3.php to domain.com/page3/

All the examples I can find are focused on CMSs, etc.. with query strings, etc.. nothing just focusing on the base URI, which I think might be what was causing the errors i was getting.

Any help is appreciated !! Thanks

Upvotes: 2

Views: 7506

Answers (2)

TheDeadMedic
TheDeadMedic

Reputation: 9997

I got this from a rather helpful chap on a forum once - never fully understood it, and there is one caveat; it implies no trailing slash unless the request is a directory.

However, I thought it was worth posting - a guru out there may easily spot the fix!?

# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{HTTP_HOST} ^www\.domain\.com
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

# remove index
RewriteRule (.*)index$ $1 [R=301]

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

Upvotes: 7

Wolph
Wolph

Reputation: 80011

You can try this in your htaccess file:

Options +MultiViews

But it depends on wheter it is enabled by your webserver. Also, do note that htaccess files are specific to Apache webservers, so it won't work if you're using something else.

Upvotes: 0

Related Questions