.HTACCESS: la guida (quasi) definitiva

  • Diego Gualdoni

image from .HTACCESS: la guida (quasi) definitiva

Sei alle prese con il file .htaccess e non sai esattamente cosa fare?

Allora sappi che in questa guida cercheremo di descrivere tutte le funzionalità del file partendo dalle basi per arrivare ai casi più complessi. E per questo motivo abbiamo creato un unico articolo che cercasse di comprendere tutto.

.htaccess: le basi

Cosa è il file .htaccess?

Bene, si parte. Il file .htaccess è un file di configurazione che si gestisce le risposte che il server web fornisce in specifiche situazioni. Per la verità sono differenti i web server che utilizzano questo file di configurazione, come ad esempio uno dei più famosi che corrisponde al nome di Apache.

Il file .htaccess opera a livello della directory in cui si trova, questo gli consente di ignorare delle configurazioni generali stabilite de altri file .htaccess posti in directory procedenti.

Ad esempio le istruzioni contenute nel file .htaccess presente nella directory nomedominio.com/amministrazione/ avranno la precedenza sulle istruzioni contenute sul file .htaccess presente nella directory nomedominio.com.

Perché si chiama .htaccess?

Questo tipo di file venivano utilizzati per controllare l’accesso di specifici utenti all’interno di alcune directory presenti nei server.

L’amministratore del sistema era così in grado di proibire l’accesso agli utenti che non avevano gli opportuni privilegi. E per fare questo venivano inserite delle username e password in un file che prende il nome di .htpasswd.

Sebbene il file .htaccess è ancora utilizzato per questo scopo, il suo uso è stato ampliato di molto. Molti dei casi con cui potresti dover affrontare vengono descritti in questa guida.

Dove si trova il file .htaccess?

Come detto in precedenza il file .htaccess è un po’ particolare e quindi può in realtà trovarsi in qualsiasi directory. Detto questo, solitamente il file si trova nella directory dove vengono contenuti i file del sito web. Queste directory possono cambiare il nome da configurazione a configurazione. I nomi più comuni sono www, httpdocs oppure public_html.

Perché non riesco a trovare il file .htaccess?

In realtà potresti semplicemente non vederlo. Infatti, solitamente, i file che iniziano con il punto (come .htaccess) non sono visibili per default. Stiamo dunque parlando di quelli che vengono considerati dei file nascosti. Se accedi alla tua directory con un normale programma di posta, come FileZilla, prova a scovare l’opzione “mostra file nascosti”.

Così facendo potrai vedere il tuo file .htaccess.

Nel caso in cui invece sei entrato nella tua directory tramite ssh, allora il comando per vedere solo i file nascosti è:

ls -ld .?*

E se il file .htaccess non c'è per davvero?

Di solito questo file è generato in automatico, quindi assicurati di aver provato tutto quello che è possibile fare per rintracciarlo.

Se proprio non c’è allora puoi crearne uno sia utilizzando un normale programma di testo (file da salvare in formato ASCII) assicurandoti di non salvarlo in formato .txt. Il nome del file dovrà essere semplicemente .htaccess

Gestione degli errori (Error Handling)

Quando un server riceve una richiesta esterna, il server stesso cerca di rispondere. Questo avviene ad esempio quando qualcuno cerca di visualizzare una specifica pagina html, oppure vuole visualizzare un video o in fine scaricare un file pdf.

Come detto il server cerca di rispondere a questa richiesta in modo da soddisfarla. Tuttavia le cose non sono così semplici e scontate. Succede delle volte che la pagina html, il video o il documento pdf non esistono. Così viene generato un errore, ed ogni specifico errore ha un suo codice ben preciso.

L’errore 404 è ad esempio l’errore generato quando un documento richiesto al server in realtà non si trova. Ma di errori ce ne sono tanti altri:

Client Request Error

  • 400 — Bad Request
  • 401 — Authorization Required
  • 402 — Payment Required (not used yet)
  • 403 — Forbidden
  • 404 — Not Found
  • 405 — Method Not Allowed
  • 406 — Not Acceptable (encoding)
  • 407 — Proxy Authentication Required
  • 408 — Request Timed Out
  • 409 — Conflicting Request
  • 410 — Gone
  • 411 — Content Length Required
  • 412 — Precondition Failed
  • 413 — Request Entity Too Long
  • 414 — Request URI Too Long
  • 415 — Unsupported Media Type.

Server Error

  • 500 — Internal Server Error
  • 501 — Not Implemented
  • 502 — Bad Gateway
  • 503 — Service Unavailable
  • 504 — Gateway Timeout
  • 505 — HTTP Version Not Supported.

Cosa accede normalmente?

Ti è mai capitato di navigare su un sito e vedere il tuo browser indicare un errore generico? Ecco, questo è quello che accade quando non viene specificato il modo con cui gestire gli errori del server. E questo non è bello!

Come specificare gli errori

L’ideale sarebbe creare un documento HTML per ogni codice di errore che si intende gestire. Il nome del file non è importante, puoi chiamarlo come credi, ma cerca di trovare un modo che sia facile poi ricordare.

Fatto questo primo passaggio, c’è il secondo da completare.

Devi associare nel documento il codice di errore con il file html creato. ErrorDocument 400 /errori/bad-request.html ErrorDocument 412 /errori/precondition-failed.html ErrorDocument 403 /errori/forbid.html ErrorDocument 404 /errori/not-found.html ErrorDocument 505 /errori/http-version-not-supported.html

E così via…..

Alternativa alla gestione degli errori

Su Internet vengono messe a disposizione tante applicazioni come ad esempio i CMS che hanno un loro modo di preoccuparsi degli errori. E da una parte questo può essere un vantaggio.

Proteggere con password tramite .htaccess

Ora vediamo nel dettaglio come proteggere delle specifiche password tramite questo file di configurazione. Che poi era il motivo originario per cui è nato il file .htaccess

.htpasswd

In questo file vengono memorizzate la password e la username. Questi valori vengono memorizzati in questo modo

username:passwordcriptata

ad esempio

mariorossi:Hd635dhY684jd

La password che vedi dunque, non è la password reale. Ma è una password appunto criptata.

Penserà il sistema a verificare che la password inserita in chiaro dall’utente coincida con quella inserita nel file .htpasswd. Se è così, l’utente avrà modo di accedere alla directory di destinazione, altrimenti dovrà ridigitare la password.

Memorizzare le password in questo modo rende il sistema più sicuro. Infatti, se qualcuno avesse accesso diretto a quel file, non potrebbe comunque risalire alle password reali perché criptate. Si tratta di una “one way encyption” che impedisce di fare il percorso inverso per ottenere le password in chiaro.

Bloccare (o sbloccare) un indirizzo ip

Se vuoi bloccare degli utenti da specifici ip, puoi configurare a dovere il file .htaccess. Questa strategia può risultare utile se è necessario bloccare qualche utente che crea qualche problema. Ma è vero che puoi fare il contrario, puoi cioè autorizzare solo gli utenti che provengono da un determinato ip escludendo tutti gli altri.

Bloccare ip

Per bloccare degli ip specifici, utilizza questa modalità:

order allow,deny deny from 134.65,65.123 deny from 69.111.45. allow from all

Ora spieghiamo cosa c’è scritto. La prima linea stabilisce che la prima istruzione che va valutata è allow, prima ancora di deny. Ciò significa che la linea presa in considerazione è la riga allow from all. Quindi, solo gli utenti che ricadono nelle istruzioni stabilite dalle due righe deny verranno bloccati.

Perché è stata adottata questa sequenza? Perché se fosse prima valutata l’istruzione denay, quella seguente, in questo caso allow, neutralizzerebbe il blocco per gli utenti provenienti dagli ip indicati.

Nota come la terza riga indica un ip parziale, questo significa che non viene bloccato uno specifico ip, ma tutti quelli che contengono la parte iniziale 69.111.45.

Sbloccare ip

Per consentire solo a pochi la visualizzazione di una direcotry o di un sito, e negare l’accesso a tutto il resto del mondo, dobbiamo utilizzare le istruzioni che seguono:

order deny,allow deny from all allow from 134.65,65.123 allow  from 69.111.45.

Bloccare un nome di dominio al posto dell'ip

E’ possibile bloccare anche un utente in base al dominio, non solo all’ip. Ad esempio, se si desidera bloccare gli utenti che provengono ad esempio da una connessione vodafone.com, con le istruzioni che seguono è possibile applicare un blocco anche se dovessero cambiare il proprio ip

order allow,deny deny from vodafone.com allow from all

Questo tipo di istruzione funziona anche nel caso di domini di terzo livello, ad esempio beta.vodafone.com

Bloccare gli utenti tramite referrer

HOSTING GRATIS Cosa è un referrer? E’ un sito che contiene un link al tuo. Quando un utente segue un link presente su una pagina di un altro sito, quel sito viene identificato come referrer.

Quale è un uso specifico di questo genere di blocco? Ad esempio puoi bloccare quei siti che utilizzano le immagini caricate sul tuo sito consumando così la tua banda. O addirittura il tuo file css, oppure altre risorse. Questo modo di agire far risparmiare loro la banda a tua disposizione senza però ricevere nessun vantaggio in termini di traffico e visibilità.

Per questi motivi, ed altri, puoi voler scegliere di bloccare determinati referrer.

Perché questa opzione sia utilizzabile però è necessario che il modulo mod_rewrite sia abilitato. Se non sei sicuro chiedi al tuo fornitore di hosting anche se, con ogni probabilità, il modulo sia già attivo di default.

Ecco le istruzioni nel caso tu voglia attivare una restrizione del genere:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://.*esempio1.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://.*esempio2.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://.esempio3.com [NC]
RewriteRule .
- [F]

Procediamo ora con la spiegazione di ogni singolo aspetto.

La riga iniziale è necessaria per stabilire che una serie di istruzioni legate alla funzione rewrite stanno per essere inviate.

Le tre righe successive bloccano domini specifici (uno per linea).

Le due lettere NC stanno ad indicare che il controllo non deve essere case sensitive, mentre le lettere OR idicano che finita la riga di appartenenza, ne sta per arrivare una nuova.

L’ultima riga, quella della effettiva regola rewrite, contiene la letter F che sta per Forbidden, cioè proibito. Quindi, ogni visitatore che ha come referrer uno dei domini indicati (esempio1.com, esempio2.com e esempio3.com) sono interdetti e non possono accedere. L’errore che il visitatore interdetto visualizzerà sarà: 403 Forbidden error.

Bloccare gli spider

Hai mai controllare il tuo account di Analytics e scoperto che tanto del tuo traffico non ha a che fare con i tuoi visitatori? Bene, si tratta di una cosa super normale che prima poi accade a tutti. In giro per la rete “girano” un sacco di programmi che prendono il nome di bot, spider, web scrapers e altri ancora.

Sono programmi disegnati appositamente per andare a recuperare specifiche informazioni dai siti web. Queste informazioni possono variare da caso a caso. A volte servono per scoprire i contenuti dei siti, come ad esempio fa lo spider di Google, a volte servono per rubare semplicemente le risorse del tuo account senza ricevere nessun beneficio.

In questo caso, appena hai individuato il bot specifico che vuoi bloccare puoi aggiungere questo codice al file .htaccess

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot) [NC] RewriteRule .* - [R=403,L]

ATTENZIONE: tenete presente che queste istruzioni renderanno il vostro sito invisibile agli utenti che utilizzano Google e Bing.

URL Redirects 301

Cosa è il Redirect 301? E soprattutto, come va impostato evitando di perdere il posizionamento del sito o della pagina che si vuol trasferire? Ecco le istruzioni su come implementare il redirect che piace ai motori di ricerca e il codice che dobbiamo utilizzare.

Supponiamo che si voglia realizzare un nuovo sito, con un nuovo indirizzo, che deve sostituire un vecchio sito che per qualsiasi ragione vogliamo abbandonare. Supponiamo anche che il sito vecchio abbia un page rank importante e diverse pagine presenti nei risultati delle ricerche di Google. Come possiamo procedere con la realizzazione del nuovo sito senza perdere tutto il lavoro fatto sul precedente? Con il Redirect 301

Redirect 301 per un sito

In questo caso, dobbiamo creare un file all’interno delle directory principale del sito e nominarlo .htaccess (puntohtaccess). E inserire il codice che segue:

RewriteEngine On
RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]

Con questo codice, tutto il traffico generato dal vecchio sito, verrà rediretto verso il nuovo (da inserire al posto di www.newdomain.com)

Redirect 301 per una pagina

Se invece, desideriamo semplicemente sostituite una sola pagina con una nuova, il codice è il seguente:

RewriteEngine On
RewriteRule ^/?vecchia-pagina.html http://www.newdomain.com/nuova-pagina.html [R=301,L]