mercoledì 5 settembre 2012

Redirect 301 con metacarattere ?

Ciao a tutti!
Oggi vi mostrerò come effettuare il redirect permanente HTTP 301 sul vostro sito internet, ovvero quell'operazione che mostra a client ed agli spider dei motori di ricerca che una pagina è stata spostata o non esiste più.
 
Questa operazione apparentemente banale, è molto importante in ambito SEO in quanto consente di redirigere il traffico altrove senza perdere preziosi punti di indicizzazione e il posizionamento all'interno dei motori di ricerca.
 
Di per sè non è un'operazione complessa ma i problemi sorgono con le querystring, ovvero con quei link che hanno la seguente sintassi:
 
index.php?param1=10&param2=test
 
Normalmente infatti scriveremmo una sintassi del tipo:
 
  1. RewriteEngine on
  2. Options -Multiviews
  3. RewriteRule ^index.php?param1=([0-9]*)&param2=([a-z]*)$ redirect301.php [L]
 
con la prima parte (racchiusa tra ^ e $) il link a cui si punta e la seconda parte (in questo caso redirect301.php) il link a cui si vuole redirigere l'utente/crowler. Il problema sorge per il fatto che la prima parte della riga contiene il metacarattere ? (punto di domanda) che nelle espressioni regolari è utilizzato per indicare la ripetizione di zero o una volta del carattere o gruppo di carateri che segue. In virtù di ciò, il server apache ferma l'analisi della stringa al ? per cui processa soltanto index.php generando un comportamento non desiderato.
 
Per risolvere questa situazione scomoda si fa ricorso ad una riga ulteriore di codice da inserire nel file .htaccess che è una condizione di riscrittura di tipo querystring, ovvero il gruppo di parametri che si trovano dopo il ? nel nostro link. Qui di seguito vi mostro semplicemente come fare:
  1. RewriteEngine on
  2. Options -Multiviews
  3. RewriteCond %{QUERY_STRING} ^param1=([0-9]*)&param2=([a-z]*)$
  4. RewriteRule ^index.php$ redirect301.php [L]
Vi consiglio anche un sito internet da cui fare prove on-line di correttezza della vostra sintassi:
 
 
E con questo vi saluto e vi dò appuntamento alla prossima guida.
 
Stay tuned!
 

5 commenti:

  1. Buonasera,
    sto provando ad effettuare il redirect di questo url, ma non funziona, chiedo se mi puo aiutare...
    Ho inserito i parametri all'interno dell'htaccess ma senza successo.
    il redirect è:
    RewriteRule ^product/manufacturer/info.htm?manufacturer_id=16&page=24$ http://www.miosito.it/esegui-nuova-ricerca-prodotto [R=301,L]
    Spero mi possa Aiutare
    Grazie
    Cordiali Saluti

    RispondiElimina
    Risposte
    1. Ciao, con l'esempio che hai fornito la sintassi è la seguente:

      RewriteEngine on
      Options -Multiviews
      RewriteCond %{QUERY_STRING} ^manufacturer_id=16&page=24$
      RewriteRule ^product/manufacturer/info.htm$ http://www.miosito.it/esegui-nuova-ricerca-prodotto [L]

      Dovrebbe funzionare!

      Elimina
  2. Sei Stato Superrrrrrr! :-)
    Grazie Mille
    a presto!

    RispondiElimina
  3. Ciao Carlo,
    ti vorrei fare un nuovo quesito, non riesco a far funzionare un redirect con la %

    Esempio:
    Link:
    http://www.miosito.it/viti_stella_0%205_3142%2004/1820-p.htm
    Redirect:
    RewriteRule ^viti_stella_0%205_3142%2004/1820-p.htm$ http://www.miosito.it/esegui-nuova-ricerca-prodotto [L]

    Altro problema punto interrogativo "?", non funziona se ho 2 punti interrogativi,
    Esempio:
    Link:
    http://www.miosito.it/product/manufacturer/info.htm?manufacturer_id=11?page=60&page=17
    Redirect:
    RewriteCond %{QUERY_STRING} ^page=60&page=17$
    RewriteRule ^product/manufacturer/info.htm?manufacturer_id=11$ http://www.miosito.it/esegui-nuova-ricerca-prodotto [L]

    Grazie

    Cordiali Saluti

    RispondiElimina
    Risposte
    1. Ciao, credo che per il problema del doppio punto interrogativo tu debba fare:

      RewriteCond %{QUERY_STRING} ^manufacturer_id=11?page=60&page=17$
      RewriteRule ^product/manufacturer/info.htm$ http://www.miosito.it/esegui-nuova-ricerca-prodotto [L]

      Per quanto riguarda il redirect con % faccio un pò di ricerche e se trovo qualcosa ti aggiorno!

      Elimina