Generatore .htaccess

Genera regole Apache .htaccess per configurazioni di server comuni.

Nessun dato lascia il tuo dispositivo

Forza HTTPS

Forza WWW / senza WWW

Header di sicurezza

Compressione GZIP

Cache del browser

Pagine di errore personalizzate

Opzioni di directory

File .htaccess generato

Cos'è un .htaccess?

Il file .htaccess è un file di configurazione per i server web Apache. Permette di definire reindirizzamenti URL, header di sicurezza, regole di cache e altro · senza modificare la configurazione principale del server.

Domande frequenti

Dove posizionare il file .htaccess?

Posizionalo nella directory radice del tuo sito (generalmente public_html o www). Le regole si applicano a questa directory e a tutte le sue sottodirectory.

Funzionerà con Nginx?

No. .htaccess è specifico di Apache. Nginx usa la propria sintassi di configurazione in nginx.conf o nei file di config del sito.

.htaccess può rallentare il mio sito?

Apache verifica il .htaccess a ogni richiesta, quindi i file molto grandi possono aggiungere costi. Per i siti ad alto traffico, spostare le regole nella config Apache principale è più rapido.

Cos'è davvero .htaccess

Un file .htaccess è il file di configurazione per-directory di Apache. Il nome è comunemente inteso come una contrazione di «hypertext access» (accesso ipertestuale), che riflette l'uso primario originale del file di limitare l'accesso ai documenti ipertestuali. Mettine uno in qualsiasi directory e le direttive si applicano a quella directory e a ogni sottodirectory al suo interno. Il file non ha nome prima del punto (è un dot-file Unix, nascosto per impostazione predefinita) e deve chiamarsi esattamente .htaccess (minuscolo, punto iniziale) affinché Apache lo trovi con l'impostazione predefinita AccessFileName.

C'è un costo reale in termini di prestazioni. La documentazione di Apache è esplicita: «se AllowOverride è impostato per consentire l'uso dei file .htaccess, Apache cercherà i file .htaccess in ogni directory. Quindi, consentire i file .htaccess causa un calo di prestazioni, che tu li usi davvero oppure no.» L'albero delle directory viene percorso a ogni richiesta HTTP. Per una richiesta a /var/www/html/foo/bar/baz.html, Apache verifica con stat /.htaccess, poi /var/.htaccess, poi /var/www/.htaccess, poi /var/www/html/.htaccess, e così via, anche quando nessuno di quei file esiste. La raccomandazione di Apache stessa è di usare i blocchi <Directory> della configurazione principale dove possibile (analizzati una sola volta all'avvio), e riservare .htaccess agli ambienti di hosting dove non hai accesso alla configurazione principale.

Quando ti serve (e quando no)

Apache elenca due casi d'uso legittimi per .htaccess: i provider di hosting che danno agli utenti un controllo limitato senza pieno accesso alla configurazione del server, e i casi in cui le direttive devono differire tra sottodirectory dove chi effettua il deploy controlla solo il file system. Al di fuori di questi, la documentazione raccomanda esplicitamente di spostare le regole nei blocchi <Directory> della configurazione principale.

nginx (il secondo server web più diffuso) non supporta affatto .htaccess; rifiuta deliberatamente i file di configurazione per-directory per ragioni di prestazioni, e tutta la configurazione risiede in nginx.conf e negli eventuali file di sito inclusi. Se il tuo progetto è su nginx, l'output di questo generatore non ti aiuterà, ti serviranno blocchi server / location nel file di configurazione di nginx. Caddy usa la propria sintassi Caddyfile con HTTPS automatico tramite Let's Encrypt come impostazione predefinita. LiteSpeed e OpenLiteSpeed supportano .htaccess per compatibilità con Apache. IIS usa web.config.

La riscrittura degli URL e il pattern HTTPS canonico

La maggior parte del lavoro non banale con .htaccess usa mod_rewrite, il motore di riscrittura degli URL basato su regole di Apache, costruito sulle espressioni regolari estese POSIX. La forma di base è RewriteRule pattern substitution [flags], opzionalmente preceduta da una o più condizioni RewriteCond. Il blocco standard per forzare l'HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

I flag [L,R=301] significano «questa è l'ultima regola di questo giro» e «rispondi con HTTP 301 Moved Permanently.» Un 301 è la scelta giusta per i reindirizzamenti permanenti, i motori di ricerca trasmettono il valore dei link e i browser memorizzano in cache in modo aggressivo. Usa 302 (Found) solo per reindirizzamenti genuinamente temporanei, quando non vuoi che lo spostamento venga messo in cache.

Dietro un bilanciatore di carico o un reverse proxy che termina il TLS, il server di origine vede semplice HTTP anche quando il browser dell'utente è su HTTPS, una regola RewriteCond %{HTTPS} off ingenua reindirizza allora all'infinito. La soluzione è controllare invece l'header inoltrato: RewriteCond %{HTTP:X-Forwarded-Proto} !https. La modalità «Flexible SSL» di Cloudflare (la CDN parla HTTP con l'origine mentre l'utente usa HTTPS) è la causa più comune di questa trappola di loop di reindirizzamento.

Scegli tra canonicalizzazione con www e senza www con un pattern simile. Scegli un solo hostname canonico per la SEO (evita problemi di contenuti duplicati) e per l'ambito dei cookie (un sottodominio www riceve cookie diversi rispetto al dominio apex per impostazione predefinita).

Compressione e caching

mod_deflate comprime con gzip le risposte testuali, riducendo drasticamente la dimensione di trasferimento su testo/HTML/CSS/JS. Racchiudi il blocco in <IfModule mod_deflate.c> così da non mandare in crash il sito sui server dove il modulo non è caricato. Brotli (mod_brotli) è il sostituto moderno e usa lo stesso pattern.

mod_expires imposta gli header Expires e Cache-Control: max-age. La sintassi molto usata «access plus 1 year» significa che la risorsa può essere messa in cache per un anno dal momento in cui l'utente l'ha recuperata. Un max-age lungo è corretto per i nomi di file delle risorse con hash (app.abc123.js); un max-age più breve è corretto per l'HTML e per qualsiasi cosa mutabile. Per un controllo più fine, Header set Cache-Control "public, max-age=31536000, immutable" sui file con hash è la pratica migliore moderna.

Header di sicurezza da conoscere

Nascondi ciò che non dovrebbe essere servito

Due righe singole di rafforzamento della sicurezza si ripagano da sole:

Apache 2.4 ha sostituito la più vecchia sintassi Order Allow,Deny con la più pulita famiglia di direttive Require, Require all granted, Require all denied, Require ip 192.0.2.0/24, Require not ip 198.51.100.5. La vecchia sintassi funziona ancora per retrocompatibilità ma è documentata come deprecata.

Insidie comuni

Altre domande

Dove va messo esattamente il file?

Nella directory di cui vuoi controllare il contenuto. La maggior parte degli utenti di hosting condiviso lo mette nella document root del proprio sito, public_html/, www/ o htdocs/ a seconda dell'host. Apache poi percorre l'albero delle directory applicando le regole a quella directory e a ogni sottodirectory al suo interno.

301 o 302, quale reindirizzamento dovrei usare?

301 Moved Permanently per gli spostamenti permanenti. I motori di ricerca trasferiscono il valore dei link al nuovo URL; i browser memorizzano il reindirizzamento in cache in modo aggressivo. Usalo per i casi «abbiamo spostato questa pagina per sempre». 302 Found per i reindirizzamenti temporanei, il browser non mette in cache e i motori di ricerca non trasferiscono il posizionamento. Usa 302 solo quando lo spostamento è davvero temporaneo; impostare 302 invece di 301 come predefinito è uno degli autogol SEO più comuni.

Come proteggo una directory con password?

Crea un file .htpasswd con l'utility da riga di comando htpasswd (memorizza righe username:bcrypt-hash) e conservalo al di fuori della tua web root. Poi in .htaccess: AuthType Basic, AuthName "Restricted Area", AuthUserFile /full/path/to/.htpasswd, Require valid-user. Il browser mostra un prompt di autenticazione Basic di sistema a chiunque visiti la directory. Questo è il classico pattern di Apache; per un'autenticazione seria valuta invece un sistema di login a livello applicativo.

Funzionerà su WordPress?

WordPress include un proprio blocco .htaccess (tra i marcatori # BEGIN WordPress e # END WordPress) che gestisce i permalink. WordPress sovrascriverà qualsiasi cosa all'interno di quei marcatori quando salvi le impostazioni dei permalink. Aggiungi le tue regole al di fuori dei marcatori WordPress (tipicamente sopra di essi) così da farle sopravvivere alla rigenerazione automatica.

Viene inviato qualcosa a un server?

No. Il generatore è JavaScript che assembla blocchi di direttive in base alle tue caselle di controllo; l'output viene costruito nel tuo browser. Nulla riguardo al tuo dominio o alle opzioni scelte lascia la pagina; lo strumento funziona offline una volta caricato.

Strumenti correlati