Siti web multipli senza VHOSTs

Premessa

Vi siete mai domandati come fare a gestire più siti web differenziandoli in base al dominio di terzo livello? Ma, prima di tutto, sapete cosé un dominio di terzo livello?
Risponderò all’ultima domanda con un esempio: www nell’url www.google.com. Per maggiori informazioni, click here.

Quando ho deciso di rispondere a questa domanda, come funzionasse il meccanismo mi era più o meno chiaro a livello di architettura distribuita dei DNS: quello che mi domandavo era se fosse possibile creare più siti web sulla stessa macchina, senza dover ricorrere alla tecnica dei Virtual Host (non tutti hanno a disposizione un server con IP pubblico su cui possono creare a piacimento VHOST).

A chi si rivolge questo HOWTO

Questo howto si rivolge ad una utenza italiana: a chi vuole avere “di più” dal suo sito web ma non sa un acca di inglese e quindi necessita di essere portato per mano.
Consiglio comunque CALDAMENTE di leggere qualche cosa dai link che sono sparsi per la guida e da cui ho attinto per riuscire nel mio scopo: il 99% dei link a cui rimando sono su Wikipedia, l’enciclopedia online liberamente accedibile e modificabile, ricca di documentazione tecnica che si rivela quasi sempre utile e precisa.

Requisiti minimi

  • Un dominio di secondo livello regolarmente registrato (es., detronizator.org)
  • Un servizio di Hosting SERIO che:
    • permetta di registrare domini di terzo livello (magari con una interfaccia web tipo cPanel)
    • supporti il file .htaccess per la configurazione “user wide”.
    • permetta l’abilitazione, sempre tramite .htaccess, del modulo mod rewrite

Io uso come hoster TopHost: hosting italiano di buon livello che si é dimostrato molto attento alle esigenze degli utenti più esperti.

Passo 01: creare le directory dei siti

Per avere più siti sullo stesso host, per prima cosa dovete creare più directory, una per ogni sito web.
Io ho creato 2 directory dentro la DocumentRoot del mio sito web (~/htdocs/ in questo caso): la DocumentRoot é la directory in cui l’hoster vi indica di mettere i file del vostro sito per essere visibili nel web. Ecco il layout della root directory del mio sito:

.
..
.htaccess   < - Il file più importante
home/   <- Root di detronizator.org (http://[home|www].detronizator.org)
downloads/   <- Root della sezione downloads (http://downloads.detronizator.org)


A questo punto, le vostre directory saranno accessibili tramite http://<vostro dominio>/<vostra directory>/.
Potrebbe bastarci ma… noi vogliamo di più! ;)

Passo 02: creare i DNS Hostname

Questo é il passo dove posso aiutarvi di meno: ora é necessario disporre di un Hoster che vi permetta di gestire liberamente i DNS Hostname per il vostro dominio. Il mio mi permette di farlo tramite un opportuno (e comodissimo) cPanel.

Ma, prima di proseguire, un paio di puntualizzazioni:

  • Un DNS Hostname é il nome DNS registrato per la macchina (il server) che ospita il vostro sito: con “registrato” si intende che esiste un server DNS che contiene una nome che punta all’IP del server.
  • I tipi pricipali di entry in un DNS possono essere un “A” o un “CNAME“: A é proprio una coppia (nome, ip) ed é unico; CNAME (Canonical Name) é un alias verso un A, ed é solitamente una “variazione” del dominio di terzo livello (anche detto “nome macchina”).
  • Poiché su un Server di Hosting ci sono più siti, l’indirizzo di ogni sito é un CNAME verso l’unico A di quel server.

Date queste definizioni, si tratta di fare una cosa molto semplice (se avete un pannello di configurazione ;)): creare un nuovo CNAME (Canonical Name) che punta al vostro hostname.
Ipotizzando di creare un CNAME “pippo” ed un altro “pluto” che punta al vostro dominio “vostro.org“, alla fine dovreste ottenere che:

www.vostro.org
pippo.vostro.org
pluto.vostro.org

riportino al medesimo sito.
Quindi ora disponete di un “sito con 3 indirizzi diversi”.

Passo 03: configurazione file .htaccess

Come su detto, é necessario che il vostro hoster abbia abilitato (o, meglio, non disabilitato) l’uso di .htaccess per i suoi utenti, e che abbia inserito il modulo Mod Rewrite in Apache.
Notare: se avete una buona conoscenza di regexp (Regular Expression per i più preparati), capirete meglio il contenuto del file di seguito riportato. Io non sono una cima delle regexp ;).
Ecco il contenuto del mio .htaccess:

RewriteEngine On   # Attiva il supporto Rewrite
RewriteBase /   # URL Base da cui far partire il rewrite

RewriteCond %{HTTP_HOST} www.detronizator.org   # Regola 01 START
RewriteCond %{REQUEST_URI} !home/
RewriteRule ^(.*)$ home/$1   # Regola 01 END

RewriteCond %{HTTP_HOST} home.detronizator.org
RewriteCond %{REQUEST_URI} !home/
RewriteRule ^(.*)$ home/$1

RewriteCond %{HTTP_HOST} downloads.detronizator.org
RewriteCond %{REQUEST_URI} !downloads/
RewriteRule ^(.*)$ downloads/$1

A parte il codice di attivazione del Rewrite engine, le regole consistono di 3 semplici linee di codice:

  1. Criterio di selezione: DNS Host address da redirigere
    RewriteCond %{HTTP_HOST} <dns_hostname_registrato in precedenza>
  2. Criterio di selezione: URL che terminano con “home/”
    RewriteCond %{REQUEST_URI} !<directory_a_cui_redirigere>/
  3. Regola da eseguire: rigirare le richieste alla directory ./home/
    RewriteRule ^(.*)$ <directory_a_cui_redirigere>/$1

Passo 04: Chiedere scusa ai più esperti

Prima ancora di ricevere commenti denigratori sulla non eccellente qualità tecnica dell’howto, chiedo scusa a tutti gli utenti più esperti per la povertà di tecnicismi di questo articolo: il mio scopo era dare una possibilità a chi é meno “preparato”.

Fine

That’s all! ;) Enjoy!

Put this post/page on your Social Bookmarking System

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • digg
  • YahooMyWeb
  • Ma.gnolia
  • blogmarks
  • BlinkList
  • co.mments
  • Shadows
  • Furl
  • Digg
  • Google
  • Live
  • Reddit
  • Slashdot