Menu

af1.it

Scrivo sul mio blog

 

Htaccess e riscrittura degli url (htpasswd generator)

11 minuti
aggiornato il
Porzione di codice del file .htaccess: nozioni basilari di utilizzo del file .htaccess e il tool molto utile htpasswd generator per il file .htpasswd

Porzione di codice del file .htaccess

Il file .htaccess è un file di configurazione disponibile sul webserver Apache ed è in grado di svolgere davvero tante funzioni importanti, utili a soddisfare ogni esigenza operativa, al fine di personalizzare il proprio sito per gestire le directory come si preferisce.

Il file .htaccess

Le potenzialità del file .htaccess sono davvero infinite in quanto permette un'ampia configurazione secondo le proprie esigenze. Iniziamo col dire una cosa semplice per i meno esperti: è un file senza nome, il solo nome è dato dalla sua estensione.

Se sul proprio pc non è possibile creare un file senza assegnargli un nome, non vale nemmeno la pena di toccare le impostazioni di sistema al fine di garantire una maggiore sicurezza di utilizzo del software. È sufficiente creare un semplice file di testo e lo si nomina htaccess.txt, una volta eseguito l'upload sul server lo si può rinominare in .htaccess

Si chiama proprio così, il punto e poi htaccess (.htaccess) in quanto il file non ha nessun nome ma solo l'estensione, ed è comunemente chiamato con il formato dell'estensione, il file htaccess. Occorre avere un'esperienza di programmazione sufficiente con un linguaggio dinamico (come PHP) per avventurarsi nell'utilizzo del file in oggetto.

Occorre che sia abilitata la funzione che permette al file di funzionare, solitamente è attiva su di ogni sistema Apache, a meno che non siano stati compilati correttamente i moduli durante l'avvio del server; comunque può dipendere anche dall'hosting, molto spesso questa funzione è già abilitata, altre volte no in quanto un uso improprio del file potrebbe creare (come del resto un uso errato di php, asp, etc.) dei loop infiniti mandando in tilt l'intero server.

Alcuni degli usi più utilizzati con questo file sono la riscrittura degli url (mod rewrite) nei siti dinamici, il redirect (es: 404) ad una pagina personalizzata degli url che non esistono, la creazione di directory protette da password, impedire a determinati indirizzi ip di spam robots l'accesso all'intero sito, oppure vietare ad alcuni spider dei motori di ricerca l'accesso in determinate directory, o file (sebbene quest'ultima operazione può essere fatta con il file robots.txt).

La scrittura del file può essere semplice o piuttosto (o molto) complessa (per molti è ancora un mistero) soprattutto quando il codice è davvero tanto per diverse direttive.
Il file .htaccess può essere utilizzato sia nella root principale del sito che, secondo le esigenze, nelle diverse sottodirectory. Passiamo a qualche esempio pratico.

Riscrittura degli url con il file .htaccess

Ammettiamo di avere un sito dinamico che utilizza PHP (con la pagina pagina.php), con indirizzi del tipo:

http://www.example.com/pagina.php?prodotti=detergenti

e lo volessimo trasformare in:

http://www.example.com/prodotti/detergenti.html

Da un punto di vista estetico e pratico è certo più funzionale, anche per i motori di ricerca che vedono un url ordinato e chiaro, invece di passaggi di parametri talvolta intricati. Vero è che gli spider dei motori si spingono anche a tali url, ma se facilitiamo il compito è certamente meglio, ricordando ancora il risultato estetico che dimostra come anche la cura degli url sia presa in giusta considerazione dal responsabile del sito, in quanto l'url risulta chiaro ed esplicativo.

Innanzitutto occorre attivare dal file il mod_rewrite:


RewriteEngine On
RewriteRule ^(.*)/$ pagina.php?iduno=$1 [L]

Per essere più precisi:

<IfModule mod_rewrite.c>
RewriteEngine On
# codice da inserire
</IfModule>

Praticamente il codice istruisce di applicare determinate regole e condizioni, se il mod_rewrite.c è attivato, funziona comunque anche senza questa specifica, comunque c'è ed è giusto fare le cose il più possibile precise.

Il carattere cancelletto ( # ) precede tutto ciò che nella riga non appartiene al codice, ma solamente una dicitura che può tornare utile al programmatore per indicare quale codice serve a cosa, specialmente se il codice diventa tanto è bene ricordarsi quando lo si consulta.

^ si trova all'inizio dell'url;

$ alla fine dell'url.
Attenzione: la fine dell'url, la prima parte della riga che termina appunto con il simbolo del dollaro; ma nella seconda parte della riga, dove troviamo $1 questa è una variabile, un parametro passato all'url, il passaggio di parametri che in url non riscritti è quello con il punto interrogativo, in questo esempio:

pagina.php?prodotti=detergenti.

Il punto ( . ) indica un qualsiasi carattere, mentre l'asterisco ( * ) qualsiasi carattere che sia presente oppure no. Nell'esempio sopra troviamo poi .html che indica di assegnare questa estensione al nuovo indirizzo url. Invece che html potrebbe essere php, htm, et cetera.

La lettera, o eventualmente anche più di una, che si trovano alla fine delle righe di codice nelle parentesi quadre si chiamano flag. L indica che se la regola (Rule) corrisponde di non proseguire oltre con eventuali successive istruzioni.

Escludendo la prima riga di codice (RewriteEngine On) che inizializza il mod_rewrite, con una sola riga di codice il vecchio url:

http://www.example.com/pagina.php?prodotti=detergenti

è stato riscritto in:

http://www.example.com/prodotti/detergenti.html

In questo esempio è illustrato come riscrivere gli url in modo che sia interpretato dal motore di ricerca come: sito web: → example.comdirectory: prodotti&#47; → pagina nella directory: detergenti.html

Diverse ed opportune richieste ovviamente vanno fatte in PHP nel file (di questo esempio) pagina.php per gestire le interrogazioni al database che scaturiscono dai parametri che arrivano dall'url, ovvero prodotti e detergenti.

La riga di codice cui sopra abbiamo visto che è in grado di gestire, di riscrivere l'url purché termini con l'estensione .html, così com'è non è in grado di gestire un url del tipo: http://www.example.com/prodotti/ ovvero un classico indirizzo di directory, che termina con lo slash.

Aggiungendo anche questa riga di codice:
RewriteRule ^(.*)/$ index.php?id=$1 [L]
siamo in grado di gestire l'url anche come fosse una directory, ovvero: http://www.example.com/prodotti/ dove è logico che quando l'url si comporta come una directory vengano elencati (in questo esempio), nella directory prodotti, i detergenti, etc.

Direttiva di utilizzo url con o senza www con il file .htaccess

Sovente, un sito web, funziona sia con www che senza, ovvero funziona normalmente sia come http://www.example.com che come http://example.com
Questo potrebbe creare, specie in siti dinamici possibilità di creare duplicati, ovvero tutte le pagine del sito che potrebbero, possono, essere raggiunte sia quando è presente il prefisso www (World Wide Web) sia quando manca.

Ecco che quando occorre stabilire che i motori di ricerca debbano utilizzare, per quanto riguarda un sito, univoci url, possiamo impiegare questo codice per forzare gli url con il www anche quando questo mancasse:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule %(.*)$ http://www.example.com/$1 [L,R=301]

Con le righe di codice sopra forziamo, obblighiamo gli url ad avere il prefisso www e se non dovesse esserci verrebbe automaticamente aggiunto, notiamo anche i flag: NC non fa caso che vi siano caratteri in maiuscolo o minuscolo, mentre R 301 è chiaramente un redirect 301 (i programmatori lo conoscono bene), che significa cioè che il vecchio url (in questo caso quello senza www) non è più disponibile e si viene reindirizzati a quello nuovo (con www). Il Redirect 301 è di estrema importanza quando si deve cambiare url a pagine web che hanno cambiato indirizzo, in questo modo si evitano eventuali problemi di indicizzazione con i motori di ricerca, in quanto potrebbero tenere indicizzate sia url di pagine che sono state spostate (quindi errore 404) che quelle nuove, cosa che accade ovviamente quando si cambiano gli url di un sito per esigenze diverse.

Con il codice sotto invece è possibile ottenere il contrario, ovvero togliere il prefisso www e lasciare solo http://
RewriteEngine On
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

Occultare il nome della directory nell'url con il file .htaccess

Non lasciarti ingannare dal verbo occultare: non c'è trucco e non c'è inganno !!! Immaginiamo di avere nel nostro sito dinamico la pagina index e poi una directory che si chiama articoli, stando agli esempi cui sopra alla riscrittura degli url l'indirizzo sarebbe qualcosa di molto simile:

http://www.example.com/articoli/prodotti/detergenti.html

la dicitura articoli potrebbe anche risultare di troppo, essere ridondante, specialmente se si sviluppano url di una certa lunghezza, magari per dividere il sito con struttura di categorie e sottocategorie e pagine.

Questo è uno stratagemma utilizzato anche in diversi forum, dove non tutti hanno necessità di riportare nell'url anche la dicitura forum, soprattutto dove potrebbe diventare un url piuttosto lungo, forse troppo. Allora, invece di:

example.com/forum/topic/post-dal-titolo--molto-descrittivo.html

si ha:

example.com//topic/post.html

Il forum è comunque (ovviamente) presente e funzionante, ma viene semplicemente omesso dall'url il nome forum. Nell'esempio l'url è tutto sommato corto, comunque anche qualche carattere in meno nell'url talvolta può tornare utile.
Con il codice qui sotto, pur continuando a utilizzare la directory denominata articoli nel nostro esempio, potremmo togliere dall'url il nome della directory, quindi invece di:

http://www.example.com/articoli/prodotti/detergenti.html

avremo

http://www.example.com/prodotti/detergenti.html

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/articoli/
RewriteRule ^(.*)$ /articoli/$1

Ricordiamo che l'istruzione RewriteEngine On deve essere inserita una sola volta all'inizio del file htaccess.

Il codice sopra deve essere inserito nel file htaccess della root principale del sito.

RewriteBase / è una direttiva che specifica il prefisso dell'url da adottare, e deve essere inserita nel file htaccess presente nella root principale del sito.

RewriteCond %{REQUEST_FILENAME} !-f indica di non includere nella riscrittura degli url di file che esistono, che sono presenti fisicamente sul server.

RewriteCond %{REQUEST_FILENAME} !-d indica di non includere nella riscrittura degli url directory che esistono.

Praticamente queste due condizioni impongono di reindirizzare gli url verso file e directory che non esistono. In parole povere se un file od una directory esistono in quanto fisicamente presenti sul server, devono essere raggiunti, altrimenti non sarebbero presenti.

Directory protetta da password con i files .htaccess e .htpasswd

Con i file denominati .htaccess e .htpasswd è possibile proteggere con password una directory. Anche il file .htpasswd è senza nome, ha solo estensione, visto che sul pc può non essere possibile creare file senza assegnare un nome, sappiamo che si possono rinominare sul sistema Apache. Sarà poi sufficiente eseguire il download dei due file e tenerli come campione, quando si avrà la necessità di crearne di nuovi con una semplice operazione copia e incolla, si andranno a ricreare sul pc questi file senza nome ma dati da sola estensione.

Ammettiamo di avere sul server la directory denominata directory_privata a cui deve accedere solo l'amministratore del sito. In questa directory andremo ad inserire il file .htaccess con il seguente codice:

AuthName "Password Protected Area"
AuthType Basic
AuthUserFile /url_assoluto/directory_privata/psw/.htpasswd
require valid-user

Quindi risulta ovvio, osservando il codice, che nella directory_privata dovremo inserire un'altra directory denominata psw che a sua volta conterrà il file .htpasswd, file all'interno del quale saranno presenti username e password criptate (su di un'unica riga di codice) con MD5 (Message Digest algorithm 5), un algoritmo.

Quando si desidera entrare nella directory_privata sarà necessario inserire username e password nella piccola finestra che compare quando si richiama l'url, in caso contrario non sarà possibile accedervi.

Come fare ad ottenere username e password crittografati ?! Con questo ottimo tool:

» » » htpasswd generator « « «

Crea il codice per la password crittografata per htaccess

Questo codice andrà inserito in una sola riga nel file .htpasswd a sua volta inserito nella directory psw presente in directory_privata.

Vietare l'accesso a ip dannosi con il file .htaccess

Se si desidera bloccare l'accesso a determinati indirizzi ip perché ad esempio associati a spam engines, possiamo farlo con il seguente codice:

Order Allow,Deny
Deny from ip_spam_1
Allow from all

Dove ovviamente ip_spam_1 è da sostituire con l'indirizzo ip che si intende escludere dall'accesso al sito. Occorre fare attenzione, essere certi che l'indirizzo ip che si intende escludere sia davvero potenzialmente dannoso, in caso contrario andremmo a vietare l'accesso a tutto il sito ad un ip amico.

Gestire url inesistenti con il file .htaccess

Con htaccess è possibile, tra le tante cose, anche gestire gli url inesistenti o non raggiungibili, questa è una delle prerogative più classiche cui htaccess è chiamato a svolgere. Grazie ai codici di stato HTTP è possibile dare indicazione precisa, al motore di ricerca o all'utente, del perché un determinato url non viene trovato. Presumiamo che i seguenti file (personalizzati) li andiamo ad inserire nella directory denominata errori. Il codice:

RewriteEngine on
ErrorDocument 400 /errori/badrequest.html
ErrorDocument 401 /errori/unauthorized.html
ErrorDocument 403 /errori/forbidden.html
ErrorDocument 404 /errori/notfound.html
ErrorDocument 500 /errori/servererror.html

L'elenco del significato degli errori: Codici di stato HTTP.

Questo invece il link ufficiale della documentazione mod rewrite: mod_rewrite – Apache HTTP Server.

 

                 

 

Felice Amadeo: autore di af1.it

af1.it è mantenuto dalla mia passione.
Se vuoi sostenere af1.it fai una donazione.

Se qualche articolo ti è piaciuto e vuoi fare una donazione, ti ringrazio.

Tanti anni fa, quando c'erano ancora le lire, un bravo artista di strada, terminata la sua esibizione di giocoliere disse alla folla intorno: se il mio spettacolo vi è piaciuto, dimostratemelo, se non vi è piaciuto scrivetelo su “un deca…”

(un deca, le vecchie 10.000 lire…)
So smile & stay in touch !!!

af1.it usa cookie tecnici anche di terzi per le statistiche visite e per annunci pubblicitari.
Per sapere come negare il consenso leggi l'informativa estesa.
Cliccando su Va bene, scorrendo la pagina o continuando la navigazione acconsenti all'uso dei cookie.
Leggi informativa estesa

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi