Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Url Rewriting e pagine con query string ma già  posizionate

Accelerare il passaggio da url dinamici già posizionati a nuovi url dall'aspetto statico. Evitare i loop.
Accelerare il passaggio da url dinamici già posizionati a nuovi url dall'aspetto statico. Evitare i loop.
Link copiato negli appunti

Script lato server e url dall'aspetto statico: i benefici dell'url rewriting nel posizionamento sono noti ai più, quindi non li illustreremo in questa occasione... tuttavia un dubbio che spesso affiora nelle menti dei SEO, specialmente se alle prime armi, riguarda il come comportarsi con le pagine dotate di query string e già  posizionate. Meglio lasciar perdere oppure applicare comunque la cosmesi degli url rischiando di turbare qualche "delicato equilibrio"? Cosa dire poi del fatto che spesso ci si ritroviamo con una serie di pagine duplicate (quella con query string e quella nuova dall'aspetto statico)?

Ricordiamo infatti che il rewriting presuppone che i vecchi url dotati di query string rimangano sempre validi: in teoria, se la struttura di navigazione del sito viene modificata correttamente, e gli url con query string non ricevono più link, nel giro di qualche tempo i nuovi url statici agli occhi degli spider dovrebbero gradualmente soppiantare quelli dotati di query string.

Spesso, tuttavia, quando le vecchie pagine sono particolarmente "forti" (e magari continuano ad essere linkate dall'esterno) i tempi di questo passaggio si allungano in modo indefinito...

In generale, quando un url ne deve sostituire un altro, esiste un metodo consolidato per dire agli spider che una pagina ne soppianterà  un'altra, e cioè inviare un header HTTP 301 (redirect permanente). Nel caso del rewriting però rischiamo di creare un loop di questo tipo:

url-statico -> rewrite in url con query string -> 301 redirect all'url-statico.....ops!

Esistono due metodi alternativi per ovviare al problema attraverso le regole di rewriting e senza mettere mano al codice degli script lato server.

Metodo 1: sintassi utilizzabile da chi abbia accesso al file di configurazione di Apache httpd.conf.

RewriteEngine On

#Se non c'è query string applico la riscrittura da statico a dinamico
RewriteCond %{QUERY_STRING} ^$
#La regola traduce 11/5.html in index.php?id=11&categoria=5
RewriteRule ^/([^/]+)/([^/]+).html /index.php?id=$1&categoria=$2 [L]
#Se la query string è presente
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&(.*)=(.*)$
#Redirect 301 da  in index.php?id=11&categoria=5 a 11/5.html
RewriteRule ^.*$ http://localhost/%2/%4.html? [R=301,L]

Le regole appena illustrate sono validissime in httpd.conf ma in un file .htaccess creerebbero comunque un loop, in quanto le regole al suo interno vengono interpretate ad ogni accesso (anche a seguito di una riscrittura).

Metodo 2: sintassi utilizzabile in file di configurazione per directory .htaccess.

RewriteEngine On

#Se la query string è assente
RewriteCond %{QUERY_STRING} ^$
#Effettuo il rewriting ed aggiungo una variabile "semaforo" (rew=1) alla query string
RewriteRule ^([^/]+)/([^/]+).html index.php?pagina=$1&categoria=$2&rew=1 [L]
#Se la query string è presente e contiene già  la variabile "semaforo"...
RewriteCond %{QUERY_STRING} ^(.*)=(.*)&(.*)=(.*)$
RewriteCond %{QUERY_STRING} !^.*rew=1.*$
#Effettuo il redirect 301 dall'url dotato di query string a quello pseudo statico
RewriteRule ^.*$ http://localhost/%2/%4.html? [R=301,L]

In entrambi i metodi la chiave di volta è rappresentata dalla direttiva RewriteCond, che consente una riscrittura condizionale sulla base della presenza e del contenuto della query string.

Da notare anche che i valori catturati con le regular expressions nella query string vengono immagazzinati all'interno delle variabili %1, %2, %n.

Gli esempi sono ipotetici ma verosimili, a "http://localhost" va ovviamente sostituito il dominio di turno.

Per ulteriori chiarimenti sulla sintassi ci viene in aiuto la documentazione di Apache sul mod_rewrite.

Ti consigliamo anche