mod_rewrite
Posted: Luglio 5th, 2008 | Author: packz | Filed under: apache, networking, Programmazione | Commenti disabilitati su mod_rewriteApache è il server web forse più famoso nel mondo dell’open source e vanta fra le sue potenzialità la presenza di un gran numero di moduli tramite cui estendere le possibilità di un server web; alcuni di questi sono molto utili e ben testati come mod_dav, mod_ssl oppure mod_rewrite che è quello che interessa a noi. Poi c’è anche chi crea moduli da fuori di testa (un applauso per baku)
Se vi siete mai chiesti come fanno i siti di blog (ma non solo) ad avere i post organizzati secondo una URL che segue uno schema
http://packz.noblogs.org/post/ANNO/MESE/GIORNO/TITOLO
la risposta è che usano proprio mod_rewrite che permette di traslare un dato URL a livello server usando le regular expression.In realtà esiste un singolo script php che recupera dal database il contenuto del post servendosi dei dati temporali.
Per abilitare questo modulo su un sistema debian-like eseguirei comandi
# a2enmod rewrite
# /etc/init.d/apache2 restart
e poi inserire un file .htaccess nella radice delle directory che vi interessa "riscrivere" contenenti le direttive utili ai vostri scopi; se per esempio poniamo come file .htaccess il seguente
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*).htm$ $1.php [NC]
RewriteRule ^variabile/{0,1}$ index.php?variabile=Inserisciunvalore
RewriteRule ^variabile/([^/]+)/{0,1} index.php?variabile=$1
e creiamo un file index.php come il seguente,
<html><head></head>
<body>
<h1>URL Rewriting test</h1>
<?
echo $_GET[‘variabile’]
?>
</body>
</html>
secondo voi cosa succede quando passiamo un indirizzo del tipo
http://your.dominio.org/variabile/666
? (supponendo che sia .htaccess che index.php siano accessibili a http://your.dominio.org/) Per informazioni ulteriori (non è che abbia spiegato molto) leggetevi ‘sti link
C’è solo da aggiungere che bisogna impostare all’interno delle direttive per i siti l’opzione AllowOverride All: per esempio
<VirtualHost *:80>
DocumentRoot /var/www/radice-del-sito/
ServerName viva-le-orge.com
<Directory />
Options FollowSymLinks
AllowOverride All
Allow from all
</Directory>
</VirtualHost>