# Disable directory listing Options -Indexes # JPEG XL uploads (gym header/logo): older mime.types don't know the extension. AddType image/jxl .jxl # Block direct HTTP access to sensitive files Require all denied Require all denied Require all denied # Belt-and-braces: block any dotfile path component (except /.well-known) RewriteEngine On RewriteRule "(^|/)\.(?!well-known)" - [F,L] # Server-side trees: never reachable by URL (the repo root is the docroot here, and # the dev tree serves it from /GitTea/repos/fitme3070.pt/). RewriteRule ^(config|includes|database|logs|backups|templates|vendor)(/|$) - [F,L] # A raiz web é o repositório inteiro, por isso fecha-se o que não é página: # - parciais (_form.php e afins) só se incluem, nunca se pedem; # - PHP soltos do platform-tools: só api/ e backups/ (auto-chamada com token) # são endpoints; o resto é incluído pelas páginas de views/sysadmin/; # - documentação (*.md) não é para servir. RewriteRule "(^|/)_[^/]*\.php$" - [F,L] RewriteRule "^shared/platform-tools/[^/]+\.php$" - [F,L] RewriteRule "\.md$" - [F,L] # ── Headers de segurança ───────────────────────────────────────────────────── # script-src: 'self' (todo o JS próprio, incl. Bootstrap/jQuery/Summernote # vendorizados desde 25/09) + 'unsafe-inline' (o site tem vários