Vai al menù, saltando i contenuti (access key "m")
Il servizio di hosting
Le pagine del nostro sito dovranno essere ospitate su un PC con
un server web (es. Apache) che può essere per esempio il nostro
PC di casa. Questa opzione non è molto conveniente per la
manutenzione, la sicurezza, la bolletta dell'energia elettrica... ecc...
e si preferisce invece usare lo spazio e i servizi messi a
disposizione da un Fornitore: gratuitamente senza banner pubblicitari
(es. Altervista),
gratuitamente con banner pubblicitari (la maggior parte)
o a pagamento (per siti professionali).
Questo vi fornirà anche un dominio a cui il vostro sito sarà raggiungibile,
solitamente sarà un dominio di terzo livello, cioè con il nome del fornitore
alla fine (es. biccari.altervista.org e non biccari.org).
Un nome di dominio di secondo livello invece va solitamente pagato. Ci sono anche domini
di secondo livello gratuiti (www.dot.tk) ma necessitano
poi di un banner pubblicitario.
Come funziona un web server (Apache)
Quando tentiamo di visualizzare una pagina internet con il nostro browser,
in pratica stiamo richiedendo al web server, tramite una richiesta HTTP, di spedirci una certa pagina.
Il server risponderà, se la pagina esiste, rispedendo la pagina e una intestazione con varie
informazioni (HTTP header block), tra cui il tipo MIME della pagina.
Se digitiamo solo il link verso una directory (come quando digitiamo http://biccari.altervista.org,
in questo caso la directory radice del sito) il web server cercherà la pagina secondo certi criteri
specificati nelle sue opzioni.
Solitamente cerca in ordine: index.html, index.htm, index.php
Un modo per non mostrare il nome della pagina è quello di far puntare
i link a cartelle ove dentro si trovi un file del tipo index.html o
simili.
Se non viene trovato nulla viene visualizzato l'errore 404 oppure
si fa una lista dei file sul sito (dipende da come i gestori
hanno configurato Apache. Di solito succede la prima cosa).
Se il file trovato ha estensione .php viene inviato al modulo PHP
di Apache che lo processa e lo riinvia ad Apache stesso per essere
inviato al Browser.
Se il file non ha estensione .php il file viene spedito direttamente al
Browser.
I vari comportamenti del Web Server Apache possono essere modificati
dai file di sistema se siete gli amministratori altrimenti potete
farlo con il supporto .htaccess (non sempre reso disponibile e, anche
se disponibile, quasi mai con tutte le funzioni attive.)
esempio di .htaccess:
DirectoryIndex index.xhtml index.php
AddType application/x-httpd-php .xhtml
la pagina iniziale viene cercata come index.xhtml e poi come index.php
le pagine processate dal modulo PHP sono quelle di default più quelle
con estensione .xhtml
Se il file iniziale è .php
allora l'intestazione non può avere la dichiarazione xml altrimenti
il motore php non ci capisce nulla e dà errore.
Per ovviare a questo inconveniente si inserisce l'intestazione xml
con il comando echo di PHP:
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";?>
Quando il web server invia la pagina al browser (UA: user agent) invia anche il
tipo MIME (MIME Content-Type header) della pagina.
Per fare ciò si basa sull'estensione della pagina.
Quindi nel caso .htm, .html, .php il MIME type inviato è "Content-type: text/html".
Nel caso .xhtml, .xht è "Content-type: application/xhtml+xml".
Il browser analizza ed effettua il render della pagina in base al tipo MIME inviato dal server.
(E non, come erroneamente spesso si pensa, in base al DOCTYPE della pagina.)
Come avrete notato su Internet è difficile trovare file con estensione .xhtml. Perché?
Semplice, perché Internet Explorer non ha la possibilità di gestire i file con tipo MIME xhtml.
Se quindi realizziamo una pagina scritta in XHTML e le diamo l'estensione, ad esempio, .html o,
nel caso ci sia del codice, .php, questa viene interpretata come una pagina HTML! E quindi IE
non ha problemi di sorta.
In questo modo però si tradisce lo spirito di XHTML. Perché scrivere in XHTML quando poi il codice
prodotto viene visto come semplice HTML? L'XHTML non è un HTML scritto minuscolo e con qualche virgoletta!
È chiaro che per codice molto semplice l'XHTML può essere visto veramente come un HTML con qualche
accortezza di scrittura
in più e basta. Ma si dimentica il parsing della pagina! Un documento visto come HTML sarà trattato
con molto buonismo dal browser che ignorerà errori nella pagina. Se invece il MIME inviato è correttamente
quello dell'XHTML il browser analizzerà la pagina in maniera severa bloccando il render al primo errore
e segnalandolo!
Come facciamo quindi ad inviare il giusto MIME? Rinominare la pagina con estensione .xhtml o .xht non è una buona
cosa dato che molti web server sono configurati in modo da non permettere la ricerca della pagina indice con
le estensione dell'XHTML. Inoltre se proprio volessimo farlo rimarrebbe il problema che l'80% degli utenti di Internet
, siccome usano IE, non potranno visualizzare il nostro sito e anzi gli verrà proposto di scaricare la nostra pagina
come se fosse un qualsiasi file, per esempio come quando si scarica un pdf.
Risolvere il problema è comunque cosa facile. Diamo alla pagina estensione .html o .htm o .php. Ora cambiamo l'header
inviato dal web server al browser. In particolare dobbiamo cambiare il Content-type dell'header.
Esistono vari metodi per farlo. Una di queste è inserire del codice PHP subito dopo l'intestazione xml
della nostra pagina. Il seguente codice permette, a seconda del browser usato, di cambiare l'header inviato assiame
alla pagina.
<?php $XHTML_OK= (int) 0; if ( strpos($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") ) $XHTML_OK=1; if ($XHTML_OK==1) {header("Content-type: application/xhtml+xml");} else {header("Content-type: text/html");}; ?>
Infine nella sezione head della pagina, dobbiamo creare un meta-tag http-equiv per specificare il charset usato, ma solo nel caso in cui la pagina venga interpretata come semplice HTML (perché in questo caso viene ignorata l'intestazione xml).
<? if ($XHTML_OK==0) echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n"; ?>
Da notare che non è possibile forzare il tipo MIME usando un meta-tag http-equiv, che inserisce nell'HTTP header block le informazioni che desideriamo, perché prevale quello inviato dal web server (almeno credo).
Il W3C validator non invia alcun HTTP_ACCEPT e quindi se vogliamo che veda la nostra pagina con il tipo mime giusto
basta aggiungere la condizione or strpos($_SERVER["HTTP_USER_AGENT"],"W3C_Validator")
. Stesso discorso
ad esempio per i motori di ricerca (per Google: or strpos($_SERVER["HTTP_USER_AGENT"],"Googlebot")
).
Controllare il client tramite HTTP_USER_AGENT, soprattutto per i motori di ricerca, è sconsigliato perché può essere
considerato un diversivo per ingannare questi ultimi
(vedi questa referenza).
Spesso si ha la possibilità di personalizzare la pagina di "File Not Found", cioè il famoso errore 404 del protocollo HTTP. Questa procedura restituisce quindi una pagina creata da noi, solitamente una pagina che deve essere chiamata (a seconda delle impostazioni di Apache), not_found.html, not_found.php, ecc... Questo comporta la comparsa a video della nostra pagina personalizzata (dove ovviamente scriveremo una cosa del tipo: Errore 404. La pagina che stai cercando bla bla bla...) e l'invio, nell'header HTTP, del codice di pagina esistenze e correttamente inviata (status 200) e non, come uno si aspetterebbe, di pagina non trovata (status 404). Spesso questa cosa non crea problemi (a parte alcuni casi come il noto problema di verifica del sito da parte di Google Webmaster Tools). Per risolvere il problema basta correggere a mano l'header inviato con la pagina personalizzata di errore. Per farlo è sufficiente inserire nella pagina personalizzata di errore (dove si vuole ma solitamente in cima al file) la seguente riga di codice PHP:
<?php header("HTTP/1.1 404 Not Found"); ?>