htaccess code to remove extension AND add+force trailing slash?

.htaccess, mod-rewrite, url-rewriting

Solution

Try this:

RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]

RewriteRule (.*)/$ $1.php [L]

The first rule redirects requests of `/foo/bar``.php` externally to `/foo/bar``/`. And the second rule rewrites requests of `/foo/bar``/` internally to `/foo/bar``.php`.

And to force the trailing slash, try this rule:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]

Problem

I'm trying to put together some htaccess code that will turn example.com/filename.php into example.com/filename/ (and force the slash) - I've tried varous approaches, but each hasn't worked quite right, from 500 errors on subfolders to issues with the trailing slash, etc... Please help!

Original source

Related problems