# CMS in una sottocartella (per esempio /cms/) con il sito nella radice del dominio.
#
# 1. Nella RADICE del dominio: un index.php che richiama il sito del CMS (vedi index-radice.php) e questo .htaccess:
#
#    Options -Indexes
#    DirectoryIndex index.php
#    RewriteEngine On
#    RewriteRule ^cms(/|$) - [L]                 # la cartella del CMS ha il suo .htaccess
#    RewriteRule ^uploads/.*\.(php|phtml|phar)$ - [F,L]
#    RewriteCond %{REQUEST_FILENAME} -f
#    RewriteRule ^. - [L]
#    RewriteRule ^ index.php [L,QSA]
#
# 2. Nella cartella del CMS: questo file come ".htaccess".
Options -Indexes
ServerSignature Off
# Il tipo giusto per fogli di stile, script, immagini e caratteri: alcuni server li mandano senza tipo e, con
# "nosniff", il browser li scarta (il pannello appare senza grafica). Dalla 1.1.7.
<IfModule mod_mime.c>
  AddType text/css .css
  AddType application/javascript .js
  AddType image/svg+xml .svg
  AddType image/webp .webp
  AddType font/woff2 .woff2
  AddType font/woff .woff
</IfModule>
RewriteEngine On

# Sicurezza: cartelle e file che dal web non si leggono mai (vedi htaccess-radice.txt per il dettaglio)
RewriteRule ^(includes|logs|aggiornamenti|privato|data|sql|docs|tools|test|test-definizioni)(/|$) - [F,L]
RewriteRule ^moduli/[^/]+/(includes|sql|docs)(/|$) - [F,L]
# I file PHP dei moduli si eseguono solo attraverso il nucleo (admin/, api/, share/), mai chiamati direttamente.
RewriteRule ^moduli/.*\.(php|phtml|phar)$ - [F,L]
# temi: il PHP di un tema (funzioni.php, viste/) gira solo dentro il sito; CSS, immagini e caratteri si servono.
RewriteRule ^temi/.*\.(php|phtml|phar|php[0-9]|phps)$ - [F,L,NC]
RewriteRule ^(VERSIONE|CHANGELOG\.md|README\.md|INSTALLA\.md|composer\.(json|lock)|package(-lock)?\.json)$ - [F,L]
RewriteRule (^|/)\.(git|env|htpasswd|installato|gitkeep) - [F,L]
# I cron si lanciano da riga di comando: dal web mai (con CMS_CRON_TOKEN e un cron via HTTP togli questa riga).
RewriteRule ^cron-[a-z-]+\.php$ - [F,L]
RewriteRule ^(uploads|aggiornamenti|logs|assets)/.*\.(php|phtml|php[0-9]|phps|phar|pl|py|cgi|sh)$ - [F,L]

<FilesMatch "\.(log|sql|md|mjs|json|lock|ini|sh|zip|gz|bak|old|orig|dist|env)$">
  <IfModule mod_authz_core.c>
    Require all denied
  </IfModule>
  <IfModule !mod_authz_core.c>
    Order allow,deny
    Deny from all
  </IfModule>
</FilesMatch>
<FilesMatch "^(config\.local\.php|\.env|\.htaccess|\.htpasswd|VERSIONE)$">
  <IfModule mod_authz_core.c>
    Require all denied
  </IfModule>
  <IfModule !mod_authz_core.c>
    Order allow,deny
    Deny from all
  </IfModule>
</FilesMatch>
<IfModule mod_headers.c>
  Header always unset X-Powered-By
  Header always set X-Content-Type-Options "nosniff"
</IfModule>
# Nel config.local.php, se il rilevamento automatico sbaglia: define('CMS_BASE', '/cms');
