Remova index.php e extensão de arquivo em outras páginas php usando .htaccess

Remova index.php e extensão de arquivo em outras páginas php usando .htaccess

Gostaria de eliminar a necessidade de incluir index.php em meus links. Em vez de

example.com/about/index.php

Eu gostaria que fosse

example.com/about/

Em segundo lugar, eu também gostaria que outras páginas não indexadas fossem navegáveis ​​sem a extensão de arquivo .php no URL. Em vez de

example.com/about/who_we_are.php

Eu gostaria que fosse

example.com/about/who_we_are

Não estou tendo sorte em fazer com que os dois funcionem simultaneamente. Aqui está o que tenho no meu arquivo .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]

Atualmente, ele está removendo .php de páginas não indexadas, mas todas as páginas de índice do diretório estão redirecionando para a página inicial.

O que estou fazendo de errado?

Responder1

Pouco depois de postar esta pergunta, encontrei uma solução para esse 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 isso ajude qualquer pessoa que esteja procurando uma solução para esse problema.

informação relacionada