1 Cosa fa il mod rewrite ?
Il mod rewrite serve per il vostro server apache a far si che le pagine dinamiche (in questo caso in php) cambino totalmente estensione e sembrino pagine html statiche
2 Per cosa serve la trasformazione da dinamiche a statiche ?
Questa trasformazione serve a far si che la vostra pagina venga assimilata meglio da un motore di ricerca. Un motore di ricerca potrebbe avere qualche difficoltà a seguire un link del genere:
codice:
http://www.esempio.it/index.php?page=notizie&id=69
Allora tramite il rewrite dell'url potremo trasformare il link sopra in una pagina di questo tipo:
codice:
http://www.esempio.it/index/notizie/69.html
Una pagina di questo tipo vi garantisco(l'ho provato personalmente nella mia piccolissima esperienza) è decisamente meglio vista dai motori di ricerca (google in primis)
Io in questo caso ho utilizzato 2 variabili nella mia url in php :
* page
* id
Ovviamente maggiori saranno le variabili minore sarà la considerazione che avrà della vostra pagina il motore di ricerca.
3 Come posso far si che il mio apache mi accetti il rewrite ?
- A -Per fare questo dovrete aver caricato un modulo di apache chiamato appunto mod_rewrite
mod_rewrite.c
Per fare questo dovrete andare nel file di configurazione di apache: httpd.conf e decommentare le seguenti righe
codice:
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
Fatto questo restartare apache .
- B - Provate a lanciare un file con dentro scritto :
codice PHP:
phpinfo();
La maggior parte di noi (credo) si trova in host presso server in cui ovviamente non potrà modificare il file di configurazione al chè passate immediatamente al punto - B - e vedrete subito se sul vostro server il servizio è attivo.
4 Ok sul mio server il servizio è attivo cosa devo fare ?
Allora partendo dal presupposto che il rewrite funziona sia su macchine con OS windows che Linux(io in locale l'ho fatto su win e in hosting su linux).
Dovrete creare un file che chiameremo .htaccess .
Dentro questo file dovremo scrivere la regola che vogliamo far interpretare al nostro web server.
Vi faccio 3 esempi di quello che si può fare (poi chi è più bravo di me con le espressioni regolari può fare miracoli):
* * * ESEMPIO 1 * * *
Se noi ad esempio utilizzassimo il sistema di template in php messo a disposizione dall'esempio del sito pho.html.it
QUI L'ARTICOLO : http://www.holyguard.net/articoli/id_582/idcat_31/pro.html
e qui l'esempio :
http://151.1.209.132/ft/index.php
Avremo delle pagine dimaniche di questo tipo :
codice:
www.sito.com/index.php?page=notizie&id=69
Cosa significa questo ?
Significa che noi stiamo utilizzando 2 pagine e 2 variabili:
Le pagini in questo caso sono index.php che avrà come codice una cosa più o meno simile
codice PHP:
$p="main"; //pagina di default per i contenuti centrali
if(isset($_GET['page'])){ //pagina passata via parametro
$p=$_GET['page'];
if($p!=basename($p) || !preg_match("/^[A-Za-z0-9-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))
$p="error"; //pagina di errore
}
include($p.".php");
Cioè include le pagine che le vengono passate tramite la variabile $page(?page=nomepagina) nella pagina che si sta visualizzando
E poi c'è la pagina notizie.php che riceve i valori dalla variabile $id (&id=) e che la utilizzerà più o meno in questo modo :
codice PHP:
$query = mysql_query("Select * from notizie where id='$_GET[id]'");
codice:
http://www.sito.com/index.php?page=notizie&id=69
Ma tra poco lo trasformeremo in una pagina di questo tipo:
codice:
http://www.sito.com/index/notizie/69.html
Per farlo non dovrete far altro che nel file .htaccess scrivere la seguente regola:
codice:
RewriteEngine On
RewriteRule ^index/([^/]+)/([^/]+).html index.php?page=$1&id=$2 [L]
E questa vi permette di fare la trasformazione dei link come detto sopra
* * * ESEMPIO 2 * * *
Il mio sito ha soltanto una variabile nell'url di questo tipo
codice:
http://www.sito.com/notizie.php?id=69
Come dovrà essere la mia regola per il file .htaccess ??
codice:
RewriteEngine On
RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]
Questa mi permetterà di trasformare la pagina in
codice:
http://www.sito.com/notizie/69.html
* * * 3 ESEMPIO * * *
Questo non differisce molto dai primi 2 ma serve soltano a far capire che ampio utillo si possa fare del rewrite:
Supponiamo che io utilizzi la classe fpdf per creare al volo file in formato .pdf
Per fare questo avremo delle pagine con dentro la query al db per estrapolare i dati e poi le varie istruzioni per la classe:
codice 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, " $titolonn");
$pdf->SetTextColor(0,0,0);
$pdf->write(8, "-Autore: $autorenn");
$pdf->write(8, "Testo: $teston");
Per richiamare il file pdf scriveremo una url di questo tipo qui :
codice:
http://www.sito.com/pdf_notizie.php?id=69
Invece tramite il nostro rewrite potremo creare un finto (o fasullo come preferite) file pdf vero e proprio:
codice:
http://www.sito.com/pdf_notizie/69.pdf
A tutti gli effetti sembra davvero un file pdf mai più andremmo a pensare che in realtà è una pagina in php
Per realizzarlo basta scrivere nel rewrite questo:
codice:
RewriteEngine On
RewriteRule ^pdf_notizie/([^/]+).pdf pdf_notizie.php?id=$1 [L]
Cioè cambiare semplicemente l'estensione nella regola.
Un pochino più sofisticato potrebbe essere anche utizzare nell'url cosa di questo tipo:
codice:
http://www.sito.com/notizie/69-titolo-notizia.html
Questo serve (a quanto ho letto nell'ultimo mese nella sezione motori di ricerca di questo forum e da quanto ho visto nelle varie agenzie di SEO = search engine optimized) a far digerire ancora meglio le nostre pagine ai vari MDR.
La rule che dovrete usare sarà sempre la stessa:
codice:
RewriteEngine On
RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]
però nella vostra pagina php (cioè la notizie.php) userete il comando explode e metteremo questo :
codice PHP:
$pagina = $_GET[id];
$divisore = explode("-", $pagina);
$id = $divisore[0];// ti restituisce il numero che hai prima del -
$query = mysql_query("Select * from notizie where id='$id'");
Janeth Kent
Licenciada en Bellas Artes y programadora por pasión. Cuando tengo un rato retoco fotos, edito vídeos y diseño cosas. El resto del tiempo escribo en MA-NO WEB DESIGN AND DEVELOPMENT.