Il file .htaccess viene utilizzato per la configurazione delle direttive specifiche per i server Web in esecuzione su Apache. Questo file influisce sulla directory in cui è situato e su tutte le sottodirectory all’interno di essa. Ad esempio, se l’.htaccess si trova all’interno della directory principale, interesserà tutte le sottodirectory al suo interno. Se invece il file si trova in una directory specifica, interesserà solo quella directory.
Se si ha accesso alla gestione del server non bisogna utilizzare l’htaccess per le impostazioni principali di accesso al sito, per attivare gzip o per la riscrittura degli url, perchè comunque questo file rallenta un po’ le prestazioni del sito. Sempre meglio impostare certe impostazioni lavorando lato server. Invece se si è su un hosting condiviso allora si possono impostare in questo modo le impostazioni che necessitano di un intervento.
Alcune piattaforme CMS come WordPress e Drupal sono inoltre dotate di file .htaccess specifici che consentono di specificare determinate configurazioni applicabili esclusivamente a quel sito
Con l’htaccess si possono configurare numerose cose, come ad esempio queste che sono tra le più usate:
- Personalizzazione delle pagine di errore
- Reindirizzamenti
- Limitazione degli utenti in base all’IP
- Blocco di bot malevoli
- Blocco di referrer spam
- Impostazione delle intestazioni HTTP
- Blocco per i Robot a determinate pagine o cartelle
- Protezione con password di determinate cartelle o pagine
Ma questo file può essere utilizzato per ottenere molto di più.
Bisogna stare molto attenti alle modifiche fatte sull’htaccess, perché se non scritto a dovere può mettere fuori uso il sito. Per modificarlo è sufficiente aprirlo con editor di testo come ad esempio Notepad++.
Come reindirizzare gli utenti a una pagina di errore specifica
In base al codice di stato restituito da un determinato file o pagina, puoi reindirizzare l’utente a una pagina di errore personalizzata.
ErrorDocument 403 /forbidden.html
ErrorDocument 404 /notfound.html
ErrorDocument 500 /servererror.html
Blocco degli utenti in base all’IP
Per motivi di sicurezza, puoi bloccare gli utenti in base al loro IP. Nell’esempio seguente, ci sono due IP bloccati. Possiamo anche decidere di non includere l’ultima cifra dell’indirizzo IP che comporterà il blocco di tutti gli IP che contengono le prime tre cifre.
order allow,deny
deny from 230.15.23.10
deny from 123.x.x.x
allow from all
Blocco dei referrer indesiderati
Il blocco dei referrer è un metodo utilizzato per impedire a determinati domini di rubare la larghezza di banda. Utilizza lo snippet di seguito per definire quali domini non sono autorizzati a fare riferimento ai tuoi contenuti e quindi riceveranno un 403 Forbidden
RewriteCond %{HTTP_REFERER} sitodabloccare\.com [NC,OR]
RewriteCond %{HTTP_REFERER} altrosito\.com
RewriteRule .* - [F]
Reindirizzamento immagini hotlink
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?iltuosito.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?iltuosito.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://immagineredirect.com/foto.jpg [NC,R,L]
Bloccare bot dannosi
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]
RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]
RewriteCond %{HTTP_USER_AGENT} ^attach [OR]
RewriteCond %{HTTP_USER_AGENT} ^autoemailspider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xenu [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus.*Webster [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.* - [F,L]
Reindirizzamento durante il mantenimento del sito
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.html [R=302,L]
Utilizzo della cache del browser
Il file .htaccess può essere utilizzato anche per migliorare le prestazioni del sito web sfruttando la memorizzazione della cache del browser. Ogni tipo di file può essere definito con un particolare valore di scadenza.
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
Abilitazione della compressione Gzip
L’abilitazione di Gzip sul server aiuta a migliorare le prestazioni del sito e la sua velocità. Se il server non lo fa di suo allora si possono inserire nell’.htaccess alcune direttive utili allo scopo:
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
Negare i metodi di richiesta HTTP
Esistono diversi metodi di richiesta HTTP che vengono utilizzati per ottenere vari risultati. Se ci sono alcuni metodi HTTP che non vuoi che siano utilizzati sul tuo sito web, puoi negarli con .htaccess.
RewriteCond %{REQUEST_METHOD} !^(HEAD|OPTIONS|POST|PUT)
RewriteRule .* - [F]
Reindirizzamenti
Se è necessario eseguire un reindirizzamento per una pagina che è stata spostata o che ha cambiato nome, è possibile farlo facilmente con .htaccess. Il redirect 301 è il miglior metodo lato seo che si possa utilizzare per non perdere posizionamenti di vecchie pagine.
Redirect 301 https://ilmiosito.com/vecchiapagina https://ilmiosito.com/nuovapagina
Rimuovere www
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) https://miosito.com/$1 [R=301,L]
Richiedere www
RewriteCond %{HTTP_HOST} ^miosito\.com$ [NC]
RewriteRule (.*) https://www.miosito.com/$1 [R=301,L]
Impedire modifiche al file .htaccess
order allow,deny
deny from all
satisfy all
Bloccare accesso ai Blank User Agent
RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteRule ^ - [F]
Specifiche per WordPress
Bloccare modifiche al wp-config
order allow,deny
deny from all
Bloccare scansione autore di post
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]
Bloccare accesso al file xmlrpc
order deny,allow
deny from all
Disabilitare accesso a wp-includes
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
Inserire uno / alla fine di ogni file
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !#
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://iltuosito.com/$1/ [L,R=301]
Disabilitare l’upload di file php nella directory upload
deny from all
Disabilitare l’accesso al file xmlrpc
order deny,allow
deny from all

