Elimine tanto index.php como la extensión de archivo en otras páginas php usando .htaccess

Elimine tanto index.php como la extensión de archivo en otras páginas php usando .htaccess

Me gustaría eliminar la necesidad de incluir index.php en mis enlaces. En lugar de

example.com/about/index.php

me gustaria que fuera

example.com/about/

En segundo lugar, también me gustaría que se pudiera navegar por otras páginas que no son de índice sin la extensión de archivo .php en la URL. En lugar de

example.com/about/who_we_are.php

me gustaria que fuera

example.com/about/who_we_are

No tengo suerte para que ambos funcionen simultáneamente. Esto es lo que tengo en mi archivo .htaccess:

Options -Indexes
DirectoryIndex index.php index.htm index.html
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Actualmente, se está eliminando .php de las páginas que no son de índice, pero todas las páginas de índice del directorio se redirigen a la página de inicio.

¿Qué estoy haciendo mal?

Respuesta1

Poco después de publicar esta pregunta encontré una solución a este problema.

# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{HTTP_HOST} ^www\.example\.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]

Espero que esto ayude a cualquiera que busque una solución a este problema.

información relacionada