Htaccess guida per Joomla e WordPress

Con htaccess potere gestire errori personalizzati, proteggere con password, bloccare IP e siti referenti, bloccare bots, gestire redirects 301, impedire il linking di immagini, limitare l’uso di directory ecc.

Cos’è un file .htaccess

I file .htaccess, è un file di testo, generalmente inserito nella cartella root, utile a fornire informazioni e direttive ad Apache su come gestire directory e file con estensioni specifiche. Htaccess può essere creato e modificato con i classici editor di testo come notepad per windows oppure nano, pluma o gedit su linux.

404-error

Come funziona htaccess

Il funzionamento è molto semplice: quando Apache riceve una richiesta, prima di eseguirla, controlla se esiste un file htaccess e in tal caso legge le informazioni contenute in modo da rispettare le direttive al suo interno. Ricordate di impostare i permessi CHMOD 644 (RW-R-R-) in tal il modo date la possibilità di lettura al server ma allo stesso tempo impedite la lettura da parte dei browser, utile per non compromettere la sicurezza.

Impostazioni e direttive del file .Htaccess

Prima di procedere eseguite sempre una copia di backup, in quanto potreste incontrare errori server!
Il FilesMatch comprende la lista della tipologia di file da memorizzare rappresentata dalle loro estensioni

Htaccess e Redirect 301 permanenti

Chiamato anche redirect permanente, codice HTTP 301 “Moved Permanently”, indica agli spider che l’url richiesto è stata trasferito in modo permanente verso un nuovo indirizzo. Molto utile per evitare che gli spider continuino a visitare la pagina precedente. Inoltre in ambito SEO permette di spostare un dominio o semplicemente una pagina evitando di perdere il potere (Trust e Rank) acquisito nel tempo

# Gestione redirect 301
Redirect 301 http://www.nomedominio.com/home  http://www.nomedominio.com

Da www a senza www

Una cosa molto importante in ambito SEO è evitare contenuti e pagine duplicate. Un esempio pratico è la possibilità di raggiungere la home del sito con due diversi indirizzi:
http://www.nomesito.com     http://nomesito.com
Per evitare questo errore ricorriamo a questo comando nel file htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.nomesito.com [NC]
RewriteRule ^(.*)$ http://nomesito.com/$1 [L,R=301]

In questo caso quando aprire la pagina http://www.nomesito.com verrà re-indirizzata a http://nomesito.com. Ovviamente possiamo anche invertire e impostare il www come predefinito.

Htaccess gestire pagine di errore personalizzate

Ci capita spesso di raggiungere un sito e trovare scritta ERRORE 404 PAGINA NON TROVATA.
L’errore 404 è solo uno dei codici di errore server del protocollo HTTP (trovate un articolo in questo sito dedicato). Questi errori oltre a non essere visti di buon occhio dai motori di ricerca, fanno perdere visite e utenti interessati ai vostri contenuti. Quindi è utile creare delle pagine personalizzate per far si che i visitatori non abbandonino definitivamente il sito. Create una pagina di errore personalizzata e inserite nel file htaccess una riga per ogni pagina creata
Esempio di 3 pagine di errori diversi (ma potete crearne anche solo una per il 404 oppure di più un base alle vostre esigenze)

# Pagina errore personalizzata
ErrorDocument 400 /errors/400.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

Bloccare i visitatori provenienti da un determinato dominio

A volte può essere necessario bloccare il traffico da uno o più domini perchè è traffico spam o comunque non desiderato.

# Blocca i visitatori provenienti dai domini indicati
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} nomesito1.com [NC,OR]
RewriteCond %{HTTP_REFERER} nomesito2.com [NC,OR]
RewriteRule .* – [F]
</ifModule>

Bloccare determini IP

Se invece volete bloccare direttamente un IP, utile nel caso sia una “macchina” quindi con più domini, utilizzate queste stringa

# Blocca ip
order allow,deny
deny from 123.45.6.7
deny from 012.34.5.
allow from all

Modificate il range di IP secondo le vostre esigenze, è possibile negare l’accesso basato su indirizzo IP o un blocco IP. I blocchi di cui sopra l’accesso al sito da 123.45.6.7, e da qualsiasi dominio sub sotto il blocco IP 012.34.5. (012.34.5.1, 012.34.5.2, 012.34.5.3, ecc).

Cambiare la pagina index

E’ possibile cambiare la pagina di apertura del sito da index.html, index.php ecc… con qualsiasi altro nome.

# Cambiare index
DirectoryIndex nomesito.html

Abilitare la Cache

Fai memorizzare i files nella cache in modo da ottimizzare i tempi di caricamento.

# Impostata la cache dei file multimediali a 6 mesi
<FilesMatch “\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$”>
ExpiresDefault A1552000
Header append Cache-Control “public”
# Impostata la cache delle immagini a 2 settimane
<FilesMatch “\.(gif|jpg|jpeg|png|swf)$”>
ExpiresDefault A1209600
Header append Cache-Control “public”

I tempi della durata della cache è espressa in secondi, quindi un ora è pari a 3600 secondi. Potete modificare la durata in base alle nostre esigenze ed anche la tipologia dei file

Disabilitare la cache per alcuni tipi di files

Al contrario potete disabilitare la cache per permettere ad alcuni file di aggiornarsi frequentemente e non vengano memorizzati.
# Disabilita la cache
<FilesMatch “.(pl|php|cgi|spl|scgi|fcgi)$”>
Header unset Cache-Control
</FilesMatch>

HTACCESS E LA COMPRESSIONE DI UN SITO WEB

La compressione dei file in un sito web, in particolare i file di testo, con mod_gzip o mod_deflate su Apache oltre a far risparmiare molta banda, in particolar modo nei siti grossi con molte visite, permette anche di velocizzare il caricamento delle pagine anche del 50%! La maggior parte dei server web è in grado di comprimere i file in formato gzip ma non è detto che tutti supportino tale funzione. Per controllare se la pagina web è compressa o meno potete utilizzare questo tool online:

http://www.gidnetwork.com/tools/gzip-test.php

Abilitare la compressione dei file con mod_DEFLATE

# Deflate compressione css, testo ecc
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/javascript

Abilitare la compressione usando mod_GZIP

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Disattivare gli ETags

# Disattiva gli ETags
<IfModule mod_headers.c>
Header unset ETag
</IfModule>