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¶m2=test
Normalmente infatti scriveremmo una sintassi del tipo:
- RewriteEngine on
- Options -Multiviews
- RewriteRule ^index.php?param1=([0-9]*)¶m2=([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:
- RewriteEngine on
- Options -Multiviews
- RewriteCond %{QUERY_STRING} ^param1=([0-9]*)¶m2=([a-z]*)$
- 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!
Buonasera,
RispondiEliminasto 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
Ciao, con l'esempio che hai fornito la sintassi è la seguente:
EliminaRewriteEngine 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!
Sei Stato Superrrrrrr! :-)
RispondiEliminaGrazie Mille
a presto!
Ciao Carlo,
RispondiEliminati 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
Ciao, credo che per il problema del doppio punto interrogativo tu debba fare:
EliminaRewriteCond %{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!