Questa "pillola" non è stata realizzata da me ma da un'utente di Html.it. Visto che a molti interessa farsi indicizzare dai motori di ricerca e che questi ultimi indicizzano meglio indirizzi semplici tipo "html" piuttosto che quelli dinamici "php/asp", questo mini tutorial spiega come "trasformare" i nostri indirizzi dinamici in pagine html.
Questo è il mio primo
tutorial e spero che sia scritto in modo soddisfacente.
Iniziamo:
1. Cosa fa il mod_rewrite?Il
mod_rewrite e' un modulo di apache che trasforma l'indirizzo digitato dal visitatore secondo precise regole decise dal webmaster e puo' essere utilizzato per far si che le pagine dinamiche (in questo esempio .php) con tutte le loro variabili sembrino delle pagine statiche .html.
2. Per cosa e' utile la trasformazione da pagine dinamiche a statiche?Questa trasformazione serve a far si che la vostra pagina venga indicizzata meglio da un motore di ricerca. Un motore di ricerca infatti potrebbe avere qualche difficolta' a seguire un link del tipo:
http://www.esempio.it/index.php?page=notizie&id=69
Tramite il
mod_rewrite e la riscrittura dell'URL potremo trasformare il link qui sopra in una pagina del tipo:
http://www.esempio.it/index/notizie/69.html
Una pagina di questo tipo, vi garantisco, l'ho provato personalmente, e' decisamente meglio vista dai motori di ricerca, google in primis.
In questo caso ho utilizzato 2 variabili nella mia URL in php:
* page
* id
Ovviamente, piu' variabili utilizzeremo, minore sara' la considerazione della nostra pagina da parte del motore di ricerca.
3. Come posso far si che il mio web server apache mi accetti il codice di riscrittura degli URL?a. Per fare questo dovrete aver caricato un modulo di
apache chiamato appunto
mod_rewrite.cSolitamente si deve aprire il file di configurazione di
apache "httpd.conf" e decommentare le seguenti righe:
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
Fatto questo basta far ripartire il web server
apache.
b. Ora come verifica possiamo creare e lanciare un file .php con scritto:
<?php
phpinfo();
?>
Nella pagina ottenuta si cerchi la voce
Loaded Modules e se all'interno di essa e' inclusa la dicitura
mod_rewrite abbiamo la conferma che il modulo di riscrittura e' correttamente attivo e funzionante.
Questa verifica non e' comunque esaustiva, in quanto se l'interprete PHP non e' caricato come modulo di apache la voce Loaded Modules non sara' presente anche se mod_rewrite e' effettivamente attivo. Naturalmente se ci si avvale di un servizio di hosting condiviso non avremo accesso al file di configurazione dell'
apache e a questo punto possiamo saltare il punto
a passando immediatamente al punto
b per verificare se il servizio e' attivo. In caso contrario possiamo richiederne l'attivazione direttamente al nostro hosting provider.
4. Sul mio server il servizio è attivo, ora cosa devo fare?Partendo dal presupposto che il
mod_rewrite funziona sia su macchine con sistema operativo Windows che Linux (in locale l'ho fatto su Windows, mentre in hosting su Linux). Si dovra' creare un file di testo che chiameremo
.htaccess.
Dentro questo file andremo a scrivere la regola di riscrittura che vogliamo far interpretare al nostro web server.
Vi faccio 3 esempi di quello che si può fare. Poi chi e' piu' bravo di me con le espressioni regolari puo' fare miracoli:
* * * ESEMPIO 1 * * *
Se utilizzassimo il sistema di
template in php descritto dalla guida del sito
html.it che trovate a questo indirizzo:
Un template con PHP e CSSe di cui trovate un esempio funzionante all'indirizzo:
http://151.1.209.132/ft/index.phpAvremo come risultato delle pagine dimaniche di questo tipo:
http://www.miosito.com/index.php?page=notizie&id=69
Google puo' facilmente ignorare tutto quello che c'e' dopo il punto di domanda e quindi il nostro sito web composto da centinaia di pagine potrebbe essere male indicizzato o solo in minima parte inserito nei motori di ricerca. Con questo sistema di template infatti Google percepisce solo la pagina "index.php" mentre in verita' tale pagina serve solo come contenitore atto a richiamare i vari menu' (notizie, contattaci, articoli, ecc. ecc.) che a loro volta devono richiamare degli articoli specifici (identificati dai numeri).
Ora vediamo come trasformare l'URL dinamico appena visto in una pagina statica del tipo:
http://www.miosito.com/index/notizie/69.html
Per ottenere cio' non dobbiamo far altro che inserire la seguente regola nel nostro file
.htaccess:
RewriteEngine On
RewriteRule ^index/([^/]+)/([^/]+).html index.php?page=$1&id=$2 [L]
* * * ESEMPIO 2 * * *
Se il nostro sito gestisce una sola variabile come possiamo fare?
http://www.miosito.com/notizie.php?id=69
Questa la regola
mod_rewrite da inserire nel nostro file
.htacess:
RewriteEngine On
RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]
In questo modo il nostro URL statico sara':
http://www.miosito.com/notizie/69.html
* * * ESEMPIO 3 * * *
Questo non differisce molto dai primi due esempi, tuttavia ci aiuta a capire l'ampio utilizzo che si puo' fare del
mod_rewrite:
Supponiamo di utilizzare la classe "fpdf" per creare al volo file in formato ".pdf".
Per fare questo avremo delle pagine con la
query al database per estrapolare i dati e a seguire le varie istruzioni per la classe, un qualcosa del tipo:
<?php
$query = mysql_query("Select * from notizie where id='$_GET[id]'");
............. etc etc
//includiamo la classe
require('fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Image('img/logo.jpg', 50, -10, 105, 48);
$pdf->SetTextColor(255,080,100);
$pdf->write(8, " $titolo\n\n");
$pdf->SetTextColor(0,0,0);
$pdf->write(8, "-Autore: $autore\n\n");
$pdf->write(8, "Testo: $testo\n");
...... etc etc
Una pagina del genere potrebbe essere richiamata con una URL di questo tipo:
http://www.miosito.com/pdf_notizie.php?id=69
Invece tramite il nostro
mod_rewrite potremo creare un "finto/vero" file .pdf:
http://www.sito.com/pdf_notizie/69.pdf
A tutti gli effetti sembra di richiamare un vero file .pdf, e nessuno pensera' che in realta' si va a richiamare una pagina .php che genera "al volo" il file .pdf. Questo il codice di riscrittura da inserire nel solito file
.htaccess:
RewriteEngine On
RewriteRule ^pdf_notizie/([^/]+).pdf pdf_notizie.php?id=$1 [L]
4. Piccola finezza per migliorare l'aspetto finale della nostra pagina "statica"Per fare i sofisticati e far indicizzare ancora meglio le nostre pagine ai motori di ricerca vogliamo che la nosta pagina "statica" abbia questo formato:
http://www.miosito.com/notizie/69-titolo-notizia.html
La regola
mod_rewrite da utilizzare sara' sempre la stessa:
RewriteEngine On
RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]
Pero' avremo l'accortezza di inserire nella pagina "notizie.php" il seguente codice:
<?php
$pagina = $_GET[id];
$divisore = explode("-", $pagina);
$id = $divisore[0]; // restituisce il numero che si ha prima del "-"
$query = mysql_query("Select * from notizie where id='$id'");
?>
In pratica quest'ultima annotazione e' un piccolo trucco in PHP.
Spero vivamente di essermi spiegato in modo chiaro e che tale tutoria possa essere utile a tutti.
P.S.: Su Tophost ho costatato che la dicitura Loaded Modules non e' visibile. Questo perche' da loro il PHP non e' caricato come modulo apache, ma come CGI. Tuttavia sembra che mod_rewrite sia attivo lo stesso.