RewriteEngine On RewriteBase / # Esconde a extensão .php: se alguém acessar /dashboard.php direto, redireciona # pra /dashboard (sem expor o nome do arquivo em links/histórico). RewriteCond %{THE_REQUEST} \s/+([^.\s]+)\.php[\s?] [NC] RewriteRule ^ /%1 [R=301,L] # Bloqueia acesso a qualquer coisa fora de public_html através de URL, # mesmo sem rewrite (defesa extra, já que src/config/storage ficam um # nível acima e não deveriam ser alcançáveis mesmo sem isso). RewriteRule ^(src|config|storage|sql)(/|$) - [F,L] # Roteia /algumacoisa para algumacoisa.php quando o arquivo existir e # nenhum arquivo/diretório real com esse nome exista. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^([a-zA-Z0-9_-]+)$ $1.php [L,QSA] # Nunca serve .htaccess/.env ou outro arquivo de config por engano. # (Options -Indexes não entra aqui de propósito: o AllowOverride do vhost # não libera o contexto "Options", só FileInfo/AuthConfig/Limit -- colocar # a diretiva aqui derrubaria o site com "Options not allowed here".) Require all denied