{"id":18045,"date":"2025-01-03T10:57:36","date_gmt":"2025-01-03T09:57:36","guid":{"rendered":"https:\/\/xlogic.org\/blog\/?p=18045"},"modified":"2026-08-01T11:08:10","modified_gmt":"2026-08-01T09:08:10","slug":"cose-e-come-si-usa-il-file-htaccess","status":"publish","type":"post","link":"https:\/\/xlogic.org\/blog\/cose-e-come-si-usa-il-file-htaccess.html\/","title":{"rendered":"File .htaccess: cos\u2019\u00e8 e come usarlo in sicurezza"},"content":{"rendered":"<p><!-- xlogic-seo-lotto50-20260801:18045 --><\/p>\n<div class=\"xlogic-direct-answer\">\n<p><strong>Il file .htaccess applica direttive Apache alla cartella in cui si trova e alle sottocartelle, quando il server consente gli override.<\/strong> Prima di modificarlo salva una copia e verifica di avere accesso al File Manager o SFTP. Questa guida \u00e8 introduttiva; l\u2019articolo per sviluppatori approfondisce sintassi e casi avanzati.<\/p>\n<p><em><strong>Nota di aggiornamento:<\/strong> Questa \u00e8 la guida introduttiva; l\u2019ID 14111 \u00e8 dedicato agli esempi avanzati per sviluppatori.<\/em><\/p>\n<\/div>\n<h2>Guida introduttiva al file .htaccess<\/h2>\n<p>Il file <code>.htaccess<\/code> (che sta per &#8220;Hypertext Access&#8221;) \u00e8 un file di configurazione utilizzato nei server web Apache per controllare vari aspetti del comportamento del server per una directory specifica e le sue sottodirectory. \u00c8 un file di testo che pu\u00f2 essere usato per definire diverse regole e impostazioni, come la gestione delle riscritture URL, la protezione da accessi non autorizzati, il controllo delle cache, la gestione degli errori e molto altro.<\/p>\n<h3>Come si usa il file <code>.htaccess<\/code><\/h3>\n<ol>\n<li><strong>Creazione del file <code>.htaccess<\/code><\/strong>:\n<ul>\n<li>Puoi creare un file <code>.htaccess<\/code> utilizzando un editor di testo come Notepad (Windows) o TextEdit (macOS). Ricorda che il nome del file deve essere esattamente <code>.htaccess<\/code> (con il punto iniziale).<\/li>\n<li>Se stai utilizzando un client FTP per accedere al tuo server, puoi caricare il file direttamente nella directory desiderata (tipicamente nella directory principale del tuo sito web).<\/li>\n<\/ul>\n<\/li>\n<li><strong>Posizionamento<\/strong>:\n<ul>\n<li>Il file <code>.htaccess<\/code> va posizionato nella directory in cui vuoi che le regole abbiano effetto. Se lo metti nella root del tuo sito, le configurazioni saranno applicate a tutto il sito, ma puoi anche metterlo in una sottocartella per limitare l\u2019ambito delle regole.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Cosa pu\u00f2 fare un file <code>.htaccess<\/code><\/h3>\n<p>Ecco alcune delle funzionalit\u00e0 pi\u00f9 comuni che puoi configurare tramite il file <code>.htaccess<\/code>:<\/p>\n<h4>1. <strong>Redirect URL<\/strong><\/h4>\n<p>Il file <code>.htaccess<\/code> pu\u00f2 essere usato per reindirizzare URL. Ad esempio, per reindirizzare una pagina da <code>http:\/\/example.com\/oldpage<\/code> a <code>http:\/\/example.com\/newpage<\/code>:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\">apache<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none py-1\" aria-label=\"Copia\">Copia codice<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-apache\">Redirect 301 \/oldpage http:\/\/example.com\/newpage<br \/>\n<\/code><\/div>\n<\/div>\n<p>Oppure per fare un reindirizzamento da HTTP a HTTPS:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\">apache<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none py-1\" aria-label=\"Copia\">Copia codice<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-apache\">RewriteEngine On<br \/>\nRewriteCond %{HTTPS} off<br \/>\nRewriteRule ^ https:\/\/%{HTTP_HOST}%{REQUEST_URI} [L,R=301]<br \/>\n<\/code><\/div>\n<\/div>\n<h4>2. <strong>Modifica del comportamento delle riscritture URL (URL Rewriting)<\/strong><\/h4>\n<p>Il modulo <code>mod_rewrite<\/code> permette di riscrivere dinamicamente gli URL in modo che siano pi\u00f9 leggibili o facciano riferimento a risorse specifiche. Per esempio:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\">apache<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none py-1\" aria-label=\"Copia\">Copia codice<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-apache\">RewriteEngine On<br \/>\nRewriteRule ^pagina\/(.*)$ \/pagina.php?slug=$1 [L,QSA]<br \/>\n<\/code><\/div>\n<\/div>\n<p>In questo esempio, quando qualcuno visita <code>example.com\/pagina\/slug<\/code>, il server carica il file <code>pagina.php<\/code> passando il parametro <code>slug<\/code>.<\/p>\n<h4>3. <strong>Protezione con password<\/strong><\/h4>\n<p>Puoi usare il file <code>.htaccess<\/code> insieme a un file <code>.htpasswd<\/code> per proteggere l\u2019accesso a una directory tramite una password. Ad esempio, per proteggere una cartella:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\">apache<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none py-1\" aria-label=\"Copia\">Copia codice<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-apache\">&lt;Directory \"\/percorso\/della\/cartella\"&gt;<br \/>\nAuthType Basic<br \/>\nAuthName \"Area Protetta\"<br \/>\nAuthUserFile \/percorso\/del\/file\/.htpasswd<br \/>\nRequire valid-user<br \/>\n&lt;\/Directory&gt;<br \/>\n<\/code><\/div>\n<\/div>\n<p>Dovrai anche creare un file <code>.htpasswd<\/code> che contiene gli utenti e le password criptate.<\/p>\n<h4>4. <strong>Gestire errori personalizzati<\/strong><\/h4>\n<p>Puoi definire delle pagine di errore personalizzate per errori comuni come 404 (pagina non trovata) o 500 (errore server):<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\">apache<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none py-1\" aria-label=\"Copia\">Copia codice<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-apache\">ErrorDocument 404 \/error404.html<br \/>\nErrorDocument 500 \/error500.html<br \/>\n<\/code><\/div>\n<\/div>\n<p>In questo esempio, quando si verifica un errore 404, il server reindirizzer\u00e0 l&#8217;utente alla pagina <code>error404.html<\/code>.<\/p>\n<h4>5. <strong>Controllo dell&#8217;accesso<\/strong><\/h4>\n<p>Puoi bloccare o limitare l&#8217;accesso a determinate aree del sito basandoti su indirizzi IP, ad esempio:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\">apache<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none py-1\" aria-label=\"Copia\">Copia codice<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-apache\">Order Deny,Allow<br \/>\nDeny from all<br \/>\nAllow from 192.168.1.1<br \/>\n<\/code><\/div>\n<\/div>\n<p>In questo esempio, solo l&#8217;indirizzo IP <code>192.168.1.1<\/code> pu\u00f2 accedere alla risorsa, mentre tutti gli altri saranno bloccati.<\/p>\n<h4>6. <strong>Abilitare la compressione Gzip<\/strong><\/h4>\n<p>Puoi configurare la compressione dei contenuti per migliorare le prestazioni del sito web, specialmente per le risorse statiche:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\">apache<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none py-1\" aria-label=\"Copia\">Copia codice<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-apache\">AddOutputFilterByType DEFLATE text\/html text\/plain text\/xml text\/css application\/x-javascript application\/javascript<br \/>\n<\/code><\/div>\n<\/div>\n<p>Questa regola comprime i file di testo e i file CSS\/JS.<\/p>\n<h4>7. <strong>Abilitare la cache del browser<\/strong><\/h4>\n<p>Puoi configurare la cache del browser per migliorare la velocit\u00e0 del sito e ridurre il carico del server:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\">apache<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none py-1\" aria-label=\"Copia\">Copia codice<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-apache\">&lt;FilesMatch \"\\.(jpg|jpeg|png|gif|js|css)$\"&gt;<br \/>\nExpiresActive On<br \/>\nExpiresDefault \"access plus 1 year\"<br \/>\n&lt;\/FilesMatch&gt;<br \/>\n<\/code><\/div>\n<\/div>\n<p>Questo imposter\u00e0 la scadenza della cache per le immagini, i file JavaScript e CSS a un anno.<\/p>\n<h4>8. <strong>Forzare l&#8217;uso di HTTPS<\/strong><\/h4>\n<p>Se desideri forzare l\u2019utilizzo di HTTPS su tutte le pagine del tuo sito:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\">apache<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none py-1\" aria-label=\"Copia\">Copia codice<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-apache\">RewriteEngine On<br \/>\nRewriteCond %{HTTPS} off<br \/>\nRewriteRule ^ https:\/\/%{HTTP_HOST}%{REQUEST_URI} [L,R=301]<br \/>\n<\/code><\/div>\n<\/div>\n<h3>Importante da sapere<\/h3>\n<ul>\n<li><strong>Ordine delle regole<\/strong>: Le regole nel file <code>.htaccess<\/code> vengono lette dall&#8217;alto verso il basso, quindi l&#8217;ordine \u00e8 molto importante. Ad esempio, una regola di riscrittura URL dovrebbe essere posizionata prima di una regola di protezione da IP.<\/li>\n<li><strong>Prestazioni<\/strong>: Anche se <code>.htaccess<\/code> \u00e8 potente, l&#8217;uso di molte regole pu\u00f2 influire sulle prestazioni del server, poich\u00e9 il file viene letto ogni volta che una risorsa nella directory viene richiesta. Se possibile, \u00e8 meglio mettere alcune configurazioni direttamente nel file di configurazione del server (ad esempio, <code>httpd.conf<\/code>) per ottimizzare le performance.<\/li>\n<li><strong>Errori di configurazione<\/strong>: Se ci sono errori nel file <code>.htaccess<\/code>, potrebbero causare il malfunzionamento del sito (come errori 500). \u00c8 una buona pratica fare delle modifiche e testarle passo dopo passo per evitare di bloccare l&#8217;accesso al sito.<\/li>\n<\/ul>\n<h3>Conclusioni<\/h3>\n<p>Il file <code>.htaccess<\/code> \u00e8 uno strumento molto utile per configurare il comportamento di un sito web su un server Apache. Permette di implementare redirect, riscritture URL, protezioni di accesso, gestione degli errori, caching, e tanto altro, senza dover modificare la configurazione principale del server. Tuttavia, \u00e8 importante usarlo con cautela per evitare errori di configurazione che possano compromettere l&#8217;accessibilit\u00e0 del sito.<\/p>\n<h2>Approfondimenti correlati<\/h2>\n<ul>\n<li><a href=\"https:\/\/xlogic.org\/blog\/guida-al-file-htaccess-per-gli-sviluppatori.html\/\">.htaccess per sviluppatori: direttive ed esempi<\/a><\/li>\n<li><a href=\"https:\/\/xlogic.org\/blog\/404-not-found-errori-comuni-http.html\/\">Errore 404 Not Found: cause e soluzioni<\/a><\/li>\n<\/ul>\n<p><strong>Fonte ufficiale:<\/strong> <a href=\"https:\/\/httpd.apache.org\/docs\/current\/howto\/htaccess.html\" target=\"_blank\" rel=\"noopener noreferrer\">Apache HTTP Server: .htaccess<\/a>.<\/p>\n<h2>Domande frequenti<\/h2>\n<h3>Perch\u00e9 il file pu\u00f2 essere nascosto?<\/h3>\n<p>Il nome inizia con un punto e alcuni File Manager non mostrano i file nascosti finch\u00e9 non si abilita l\u2019opzione.<\/p>\n<h3>Cosa fare dopo un errore 500?<\/h3>\n<p>Rinomina temporaneamente il file o ripristina la copia precedente, quindi controlla la sintassi e i log.<\/p>\n<h3>Funziona con LiteSpeed?<\/h3>\n<p>LiteSpeed Enterprise supporta molte regole compatibili con Apache, ma alcune direttive possono dipendere dalla configurazione.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Scopri cos\u2019\u00e8 il file .htaccess, dove si trova e come usarlo per redirect, accessi e configurazioni senza causare errori o blocchi del sito.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[5],"tags":[],"class_list":["post-18045","post","type-post","status-publish","format-standard","hentry","category-news"],"modified_by":"Team tecnico Xlogic","_links":{"self":[{"href":"https:\/\/xlogic.org\/blog\/wp-json\/wp\/v2\/posts\/18045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xlogic.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xlogic.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xlogic.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/xlogic.org\/blog\/wp-json\/wp\/v2\/comments?post=18045"}],"version-history":[{"count":0,"href":"https:\/\/xlogic.org\/blog\/wp-json\/wp\/v2\/posts\/18045\/revisions"}],"wp:attachment":[{"href":"https:\/\/xlogic.org\/blog\/wp-json\/wp\/v2\/media?parent=18045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xlogic.org\/blog\/wp-json\/wp\/v2\/categories?post=18045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xlogic.org\/blog\/wp-json\/wp\/v2\/tags?post=18045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}