Condividi su Facebook
Apache e mod rewrite
Scritto da: Monska il 05/09/2009 alle 01:03
Tag: Internet, Informatica, Apache, SEO.Visto 5973 volte.


Apache

Il mod rewrite è una tecnica utilizzata per generare URL più semplici e più rappresentative del contenuto della pagina, senza dover mostrare una serie di assegnazioni di variabili.

Spesso e volentieri, in molti siti, ci capita di vedere url del tipo:

Code:

http://<dominio>/index.php?page=home

Questo perchè non viene utilizzato il mod rewrite per sovrascrivere tale URL rendendola più semplice come ad esempio

Code:
http://<dominio>/home/

Lo scopo del passaggio di variabili via GET può essere di svariato genere, ma è sempre finalizzato a segnalare allo script determinate informazioni che, una volta processate, determineranno uno specifico output.
L'uso più frequente è quello di segnalare in quale posizione del sito ci troviamo.
Per esempio, nel caso sopracitato, si comunica a index.php che ci si trova nella posizione home. Questo determinerà un determinato tipo di contenuto della pagina.
Nel caso di

Code:

http://<dominio>/index.php?page=contatti

stiamo indicando a index.php di stampare le informazioni relative ai contatti.

URL di questo genere sono spesso mal interpretate dai motori di ricerca, o meglio, dato che le variabili posizionate nell'indirizzo generano diversi risultati, il crawler spesso si limita a ricevere il template della pagina senza indicizzarne il contenuto dinamico (questo secondo svariati studi di SEO).
Inoltre, a livello estetico, sono sicuramente meglio URL ben formate, che tendono a dare una specie di indicazione generale di ciò che la pagina contiene.

Mantenendo quindi URL del tipo

Code:

http://<dominio>/index.php?page=home
http://<dominio>/index.php?page=contatti

otterremo una scarsa visibilità sui motori di ricerca, una peggiore indicizzazione dei contenuti e un livello estetico inferiore.

Vediamo quindi come possiamo implementare il mod rewrite sul nostro sito.
ATTENZIONE: questo tutorial è riferito ad Apache.
Per prima cosa accertiamoci che il nostro dominio supporti il mod rewrite. Per farlo carichiamo sul nostro server una pagina PHP contenente il seguente codice:

Code:

<?php phpinfo() ?>

e andiamo a vedere l'output.
Nella sezione Loaded Modules dovremmo trovare la scritta mod_rewrite.
Nel caso non fosse presente dovremo abilitare il modulo.
ATTENZIONE: alcuni servizi di hosting disabilitano questo modulo per ragioni di sicurezza.

Una volta che ci siamo accertati che il modulo è caricato in Apache possiamo proseguire con la configurazione.
ATTENZIONE: il server Apache deve essere abilitato alla sovrascrittura della configurazione tramite file .htaccess.
Per farlo dovremo editare il file .htaccess, che permette la sovrascrittura di alcuni parametri di configurazione di Apache.
Scarichiamo quindi dal nostro dominio il file .htaccess o, se sul dominio non è presente, creiamolo.

La prima istruzione da impartire è quella di abilitazione del mod_rewrite con:

Code:

RewriteEngine On

Iniziamo ora a inserire le regole di riscrittura dell'URL, rifacendoci all'esempio sopracitato:

Code:
RewriteRule ^home/?$ index.php?page=home
RewriteRule ^contatti/?$ index.php?page=contatti

Con queste dichiarazioni stiamo dicendo al nostro WebServer Apache che, se la url è del tipo
http://<dominio>/home/
dovrà sostituirla con
http://<dominio>/index.php?page=home
e nel caso di contatti
http://<dominio>/contatti/
sarà sostituita con
http://<dominio>/index.php?page=contatti

La URL che sarà visibile sul browser sarà sempre del tipo
http://<dominio>/home/
e
http://<dominio>/contatti/
ma per lo script PHP sarà come se fossero state inserite le URL
http://<dominio>/index.php?page=home
e
http://<dominio>/index.php?page=contatti

Infine inseriamo nel file .htaccess l'istruzione per inibire l'accesso a chiunque al file .htaccess e .htpasswd (nel caso sia presente) con la seguente dichiarazione:

Code:

<Files ~ "^.(htaccess|htpasswd)$">
deny from all
</Files>

Carichiamo il file nella root directory del nostro sito e testiamo il tutto con le nuove URL.

Il caso di passaggio di variabili
L'esempio precedente analizza l'utilizzo del mod rewrite nel caso statico, ovvero nel caso predefinito di pagine come home o contatti.
Se invece dovessimo utilizzare il mod rewrite con delle variabili dinamiche, come per esempio degli ID o degli offset per delle query, il metodo precedente non andrebbe più bene.
Tramite l'utilizzo delle espressioni regolari è possibile rendere dinamico anche il mod rewrite.
Un esempio chiarificatore potrebbe essere quello della suddivisione in sezioni e in pagine di un contenuto come un forum.
Una volta entrati in una determinata sezione, non vengono listati tutti i post relativi, ma questi vengono suddivisi per pagine.
Si avrà quindi una URL simile a

Code:

http://<dominio>/forum.php?sezione=informatica&page=1

Ovviamente non è possibile inserire nel file .htaccess tutte le possibili sezioni e pagine del forum dato che esse sono dinamiche. Si ha quindi la necessità di formulare un file .htaccess che interpreti l'URL e generi dinamicamente quella reale.
Nel caso dell'URL del forum la regola da applicare sarà:

Code:
RewriteRule ^forum/(.*)/?([0-9]*)/?$ forum.php?sezione=$1&page=$2

In pratica abbiamo associato alle espressioni regolari una variabile.
Quanto avviene il matching di (.*) il motore del mod rewrite associa alla variabile $1 il match e analogamente il match di ([0-9]*) viene associato a $2.
Ovviamente il numero è associato progressivamente, dal numero 1, in base all'ordine delle espressioni regolari, quindi $3 identificherà la terza espressione regolare inserita nella RewriteRule.


12/01/2010 - 13:02:54dodo dice:
la tuia guida mi è stata utilissima ma non riesco a settare l'utilizzo su questo esempio:
ho determinate news per la home page che mi danno questo url

http://www.miodominio.it/index.php?pagina=news&id=354&singola=1

se volessi traformarlo in http://www.miodominio.it/notizia354

qual'è il code del rewriterule?

ti ringrazio
dodo
15/01/2010 - 13:06:54NeRON dice:
RewriteRule ^notizia([0-9]*)$ http://www.miodominio.it/index.php?pagina=news&id=$1&singola=1
15/01/2010 - 20:50:43Monska dice:
Attenzione perchè la Rule come l'ha scritta Neron rischia di non fetchare la rewrite perchè in fondo, spesso, viene messa una slash. Quindi la RewriteRule corretta dovrebbe essere:
RewriteRule ^notizia([0-9]*)/?$ http://www.miodominio.it/index.php?pagina=news&id=$1&singola=1

Nel caso ci fossero altre delucidazioni, siamo sempre disponibili.

Dany

Aggiungi un commento:
Nick:
captchaInserire il codice:





Licenza Creative Commons

Blog CodiceASbarre.Net di CodiceASbarre.Net sotto licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Italia License.
Lavoro basato su www.codiceasbarre.net.
Ulteriori permessi in merito questa licenza possono essere richiesti a info@codiceasbarre.net.


Link ad altri blog: