Impostare un redirect 301 tramite Apache, Php e Asp
September 12th, 2006 in Web MarketingUn redirect 301 serve a comunicare agli spider dei motori di ricerca che una url non è più disponibile o che è avvenuto un cambiamento nella struttura delle url, per cui lo spider dei motori di ricerca deve essere reindirizzato verso la nuova url.
Durante il Search Engine Strategies di San Jose più volte è stato ribadito che è di fondamentale importanza evitare che lo spider dei motori si trovi davanti a pagine non più esistenti o che indicizzi contenuti duplicati. A tal proposito il sistema più veloce e sicuro è quello di utilizzare un “reindirizzamento permanente”, comunicando uno status code 301 nell’header della pagina.
Esistono diverse tecniche per impostare un redirect 301, l’unico limite è che tutte operano lato server, per cui non è possibile impostare uno status code 301 tramite semplice markup html.
APACHE è un server web, tramite il file .htaccess è possibile configuare alcuni parametri:
Redirect 301 /vecchia/url /nuova/url oppure Redirect Permanent /vecchia/url /nuova/url
Con una delle due istruzioni è possibile reindirizzare una vecchia url verso una nuova.
Tramite PHP è sufficiente inserire nell’intestazione della pagina non più disponibile il seguente codice:
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.nuova-url.com/');
Infine in ASP, sempre nell’intestazione della vecchia pagina, andrebbe inserito il seguente codice:
Response.Status="301 Moved Permanently" Response.AddHeader "Location","http://www.nuova-url.com/"
08:58
Aggiungo anche, per apache,
RedirectMatch 301 ^(pattern)$ /nuova/url/$1dove il patern è una espressione regolare che permette, ad esempio, di fare un redirect per ogni pagina del dominio in un colpo solo.
09:10
Grazie per l’intervento, aggiungo che se tra i lettori qualcuno dovesse avere dei dubbi su come impostare un’espressione regolare specifica per il suo sito può tranquillamente postare un commento qui.
14:53
Ciao mi chiedevo se utilizzando il codice php
per il redirect 301 si potesse aggiungere un countdown?
12:23
Ciao,
non ho ben capito la domanda, vuoi che appaia un countdown prima del redirect ?
Penso che andrebbe gestito lato client il countdown, tramite javascript per poi lasciare al php il redirect. Andrebbe testato per capire la fattibilità.
10:24
Cosa succede se uno lascia libero il campo location, mi spiego io ho eliminato delle pagine, come faccio a dire a Google che deve elimminarle?
Mi conviene forse un sistema che prende magari delle parole chiavi e rimanda alla pagina di ricerca?
10:32
Se elimini delle pagine devi impostare dentro htaccess un redirect 301 verso l’home del sito o verso le pagine che hanno sostituito le vecche. Naturalmente il redirect verrà eseguito solo se si tenta di accedere alle vecchie pagine.
Le direttive sono RewriteCond e RewriteRule.
14:59
RedirectMatch 301 ^(pattern)$ /nuova/url/$1
dove il patern è una espressione regolare che permette, ad esempio, di fare un redirect per ogni pagina del dominio in un colpo solo.
io avrei bisogno di fare un redirect 301 di tutte le pagine presenti su http://www.nomedominio.it/nomecartella a sottodominio.nomedominio.it mi potete aiutare?
Grazie
18:11
Ciao Marco,
ipotizzando che utilizzi Apache:
RewriteCond %{REQUEST_URI} ^/nomecartella
RewriteCond %{HTTP_HOST} ^www\.nomedominio\.it
RewriteRule (.*) http://sottodominio.nomedominio.it$1 [R=301,L]
22:09
ciao,
per evitare di disperdere i la popolarità dei link entranti al mio sito vorrei operare un redirect 301 da
sito.net
a
http://www.sito.net
Ora, se ho capito bene, volendo usare la soluzione PHP dovrei cambiare il virtualHost nell’httpd.conf e, per sito.net, farlo puntare a una pagina redirect.php invece che all’attuale index.php. In questa pagine iserisco il codice sopra riportato.
Corretto?
altrimenti usando .htaccess cosa scrivo?
Grazie
10:24
Ciao,
puoi usare .htaccess per gestire il redirect da un dominio ad un altro:
RewriteEngine On
# Redirect
RewriteCond %{HTTP_HOST} ^sito\.net
RewriteRule ^(.*)$ http://www.sito.net$1 [R=permanent,L]
11:53
Ciao a tutti ragazzi
una domandona: se io volessi reinderizzare l’url
http://www.sitomio.it/index.php
a questo nuovo indirizzo
http://www.sitomio.it
comed devo fare?
Grazie a tutti
00:12
Ciao.
Sto tentando di rendere statiche le pagine dinamiche del mio sito. Prendiamo per esempio la pagina /ele_prod.php?cid=1
Per poter utilizzare delle stringhe mirate nell’url, devo modificare l’url in questo modo:
/ele_prod.php?vd=$tagurl&cid=1
per questo non ho problemi. Naturalmente, credo di dover inserire un redirect nella pagina .php in questione, per non avere delle pagine duplicate. Inoltre, nel file .htaccess devo inserire il rewrite e un nuovo redirect 301. Ho scritto le seguenti istruzioni:
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*)\(.*)\.html ele_prod.php?vd=$1&cid=$2
RedirectMatch 301 ele_prod.php?vd=$1&cid=$2 (.*)\(.*)\.html
Tutto ciò è corretto?
Grazie in anticipo!
01:48
Ciao,
io vorrei tramite htaccess spostare ogni singola pagina nel nuovo dominio come ad esempio :
sito/biografia/ a nuovosito/biografia
Io sto provando questo ma non va:
Redirect 301 /rock http://www.sito.it/rock/
Cosa sbaglio?devo mettere qualcosa prima di questa riga? grazie mille
10:26
Ciao Domenico,
su che sistema hai provato il redirect ?
Il problema potrebbe essere il match, forse dovresti usare:
RedirectMatch 301 ^(pattern)$ /nuova/url/$1
20:40
Ciao.
Vorrei sapere come mai, l’espressione:
RewriteRule ^nuova-url.html http://www.miosito.com/vecchiaurl.php [L,R=301]
effettua il redirect al contrario. In pratica, reindirizza la nuova pagina verso la vecchia! Ma non dovrebbe fare il contrario?
18:51
Ciao,
la vecchia url va prima, la sintassi corretta è
Redirect 301 /vecchia/url /nuova/url
00:07
Ciao, Benedetto, e grazie per la risposta.
Ho provato a scrivere:
Redirect 301 /vecchiaurl /nuovaurl,
ma la pagina non viene reindirizzata.
Devo ancora aggiungere qualcosa, sull’htaccess? oppure potrebbe essere qualche problema del server Apache, o della sua configurazione?
10:35
Ciao,
questo metodo funziona solo per url esatte, per cui se devi reindirizzare solo una pagina verso la nuova url allora dovrebbe funzionare.
Occhio che la seconda url forse la devi scrivere con http davanti:
Redirect 301 /oldpath http://www.nuovaurl.com/
18:10
Ciao, Benedetto.
Grazie di nuovo per l’esaustiva e risolutiva risposta.
Ho applicato la regola del Redirect 301, ed ora è funzionante. Ho provato ad applicarla ad un caso specifico, cioè a seguito del Rewrite di una pagina, su server APACHE. L’intento è quello di reindirizzare la vecchia pagina Prova.php in una identica riscritta in .html. Ecco la regola sull’ .htaccess:
RewriteEngine on
RewriteBase /
RewriteRule prova.html prova.php
Redirect /prova.php http://www.miodominio.com/prova.html
Quando cerco di accedere alla pagina prova.php, il sito resta in fase di caricamento per un pempo enorme, non visualizzando ne la vecchia, ne la nuova pagina, come se si creasse un loop.
Riesci a capire dove sta il problema?
Grazie mille.
Eventualmente (una volta che imparo la tecnica…) posso rispondere ad eventuali altre domande quì sul blog?
13:26
Salve a tutti,
io vorrei reindirizzare il vecchio sito verso un altro nuovo mantenendo però il vecchio indirizzo.
http://www.nomesito.com verso http://www.nomesito.altervista.com mantenendo però nella barra il vecchio indirizzo.
Questo è possibile?
14:24
Per Cristian:
Non puoi usare quelle due righe in quel modo, va in loop, prpva a togliere il RewriteRule
Per Fabrizio:
No, non è possibile, dovresti usare i frames e caricare il nuovo sito in un frame interno.
21:04
[...] Il primo permette di ottenere una e-mail ogniqualvolta il server risponde con un errore 404. Mi è stato utilissimo: mi sono accorto che, avendo spostato un’intera categoria fuori dal loop, le pagine in essa contenute erano cercate dagli spider e, ovviamente, non individuate. A quel punto ho effettuato dei redirect 301 (leggi un ottimo articolo su questo argomento) via htaccess risolvendo definitivamente il problema. [...]
16:49
Ciao Benetto,
nell’esempio con codice ASP c’è un = di troppo
Response.Status=”301 Moved Permanently”
Response.AddHeader=“Location”,”http://www.nuova-url.com/”
dovrebbe essere così
17:00
Ciao Simone,
grazie per la segnalazione, ho corretto il codice
18:39
Ciao Benedetto,
io vorrei fare un redirect permanente di un file php che genera moltissime pagine.
Sarebbe un redirect da
http://www.miosito.it/vecchionome.php?cat=1 (e numeri successivi)
a
http://www.miosito.it/nuovonome.php?cat=1 ecc
Mi potresti dire cosa devo scrivere in htaccess?
Grazie!
10:15
Ho variato un po di cose e ho scritto questi redirect e e questi revrite
posto solo due o tre righe di esempio ma purtroppo sono oltre 100.
redirect 301 /minestre.php http://www.miodominio.com/minestre.html
poi ho pure:
redirect 301 /minestre.php?page=ricetta&titolo=RIBOLLITA http://www.miodominio.com/ricetta-13-ribollita.html
poi dopo i 301 ho:
RewriteEngine on
RewriteRule ^([^/]+)-([0-9]+)-([^/]+).html$ index.php?page=$1&titolo=$2&nome=$3 [L]
RewriteRule ^([^/]+).html$ index.php?argomento=$1 [L]
funziona quasi tutto, l’unico inconveniente è che se io scrivo la seguente url
http://www.miodominio.com/minestre.php?page=ricetta&titolo=RIBOLLITA
oppure:
http://www.miodominio.com/ribollita.php
mi da sempre come pagina
http://www.miodominio.com/minestre.html
solo che nel primo caso mi da:
http://www.miodominio.com/minestre.html?page=ricetta&titolo=RIBOLLITA
aprendo sempre la pagina minestre e giustamente non utilizza i parametri dopo .html
La mia impressione è che legga solo il primo 301 che trova in lista ignorando il secondo.
Esiste la possibilità di correggere questo problema che appare più per l’indicizzazione che per l’utente?
Grazie in ogni caso.
10:32
Ciao Alibrando,
si il primo redirect fa terminare la lettura dell’htaccess, è importante l’ordine con cui fai eseguire le istruzioni.
Per risolvere farei gestire tutto al rewrite engine, per cui scrivere il tuo il blocco di codice:
RewriteEngine on
RewriteRule ^([^/]+)-([0-9]+)-([^/]+).html$ index.php?page=$1&titolo=$2&nome=$3 [L]
RewriteRule ^([^/]+).html$ index.php?argomento=$1 [L]
Seguito dalle istruzioni di redirect utilizzando RewriteCond e RewriteRule [R=301,L]
13:22
Grazie mille
mi scuso di nuovo ma avrei bisogno di capire bene la sintassi da scrivere perchè ho provato in tanti modi ma ricevevo conflitti o non funzionava.
prendendo per valida la prima parte del codice ovvero:
RewriteEngine on
RewriteRule ^([^/]+)-([0-9]+)-([^/]+).html$ index.php?page=$1&titolo=$2&nome=$3 [L]
RewriteRule ^([^/]+).html$ index.php?argomento=$1 [L]
Come dovrei usare il RewriteCond e RewriteRule [R=301,L] per redirigere la riga:
redirect 301 /minestre.php http://www.miodominio.com/minestre.html
e la riga:
redirect 301 /minestre.php?page=ricetta&titolo=RIBOLLITA
Ti prego di perdonare queste mie richieste che forse ti portano via tempo.
Grazie in ogni caso
17:53
Qualcosa mi sfugge… chi ha un idea?
Ho una RewriteRule nell’htaccess di questo tipo:
RewriteRule ^area_([^.]+)_categoria([^.]+)_([^.]+)_pag([^.]+).html$ index.php?&area=$1&sottoarea=$2&nome=$3&id=$4 [T=application/x-httpd-php]
ma vorrei fare in modo che sulla barra dell’indirizzo venisse cmq mantenuta la $QUERY_STRING.
Ovvero, tramite un accesso del tipo:
http://www.miosito.it/area_diprova_categoria0_cianfrusaglie_pag334.html?parametro=abcdefghijkl
desiderei che rimanesse scritto ?parametro=abcdefghijkl
…che in Apache corrisponde appunto al $QUERY_STRING.
invece lo perdo…
16:33
buongiorno, qualcuno sa se è possibile reindirizzare http://www.miononno.it verso http://www.miozio.it ma fare in modo che il browser visualizzi sempre http://www.miononno.it ?
è tecnicamente possibile?
grazie!
18:27
vrei bisogno di dirottare tutto il contenuto di una directory verso
un’altra senza però cambiare l’url…quindi pensavo ad utilizzare
rewriterule…
Questo comando messo in htaccess funziona però mi viene cambiato
l’url:
redirect 301 /directory/ http://www.nomesito.com/directory/
Qualcuno mi può aiutare?
12:03
Ciao a tutti,
avrei la necessità sotto apache di far gestire tutte le richieste ad una pagina php.
Per esempio, se da browser si scrive:
http://www.nomedominio.it/dir1/dir2
la richiesta dovrebbe essere indirizzata a:
http://www.nomedominio.it/index.php
ma sul browser deve restare la richiesta originale.
Ho fatto un redirect del 404 con
ErrorDocument 404 /index.php
però le richieste $_GET restano ma perdo i $_POST.
Come posso fare?
15:44
Ciao!
Vorrei chiedere una cosa su delle righe dicodice che ho immesso nel file htaccess per avere conferma di aver scritto giusto anche se attualmente funziona …
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^miosito\.it [NC]
RewriteRule ^(.*)$ http://miosito/$1 [L,R=301]
Redirect /index.php http://miosito/sito/
Redirect /index.php http://www.miosito/sito/
per chiarimento specifiche che si tratta di uno spostamento in una sottocartella lasciando comunque una index nella root e del doppio dominio …
Grazie per leventuale risposta.
08:53
l’esempio è un pò troppo “astrattro” ad esempio:
RewriteCond %{HTTP_HOST} !^miosito\.it [NC]
RewriteRule ^(.*)$ http://miosito/1 [L,R=301]
misito/1 ? manca il .it o il .com per cui o è un errore o solo nell’esempio non è riportato….
19:23
Ciao,
anch’io ho un problema con il rewrite: al’interno dello stesso sito dovrei fare puntare le pagine da:
http://www.miosito.it/costante1/costante2/costante3=variabile1/costante4=variabile2/costante5=variabile3
a
http://www.miosito.it/costante6/variabile2/variabile3
tenendo conto che gli apici e gli spazi contenuti nelle variabili 2 e 3 vanno sostituiti con trattini.
Non saprei da che parte cominciare, in quanto ho già dei rewrite attivi, ma per indirizzi singoli. Qui si tratta di modificare oltre 1000 indirizzi.
Si riesce a fare?
12:23
Ciao a tutti!!
sto facendo dei cambiamenti tramite un Mod rewrite (su joomla) alla URL del mio sito.
In pratica la vecchia URL è del tipo:
hxxp://xxx.mio-sito.it/annunci-affitto/
è stata modificata in:
hxxp://xxx.mio-sito.it/affitto-casa/
Il problema è che ho diciamo un 5000 pagine…. forse anche di +,
ed i casi possibili delle pagine possono essere i seg.:
hxxp://xxx.mio-sito.it/annunci-affitto/regione.html
che dovrei reindirizzare a:
hxxp://xxx.mio-sito.it/affitto-casa/regione.html
poi,
hxxp://xxx.mio-sito.it/annunci-affitto/regione/città.html
che dovrei reindirizzare a:
hxxp://xxx.mio-sito.it/affitto-casa/regione/città.html
ed infine,
hxxp://xxx.mio-sito.it/annunci-affitto/regione/città/titolo-annuncio-id.html
che dovrei reindirizzare a:
hxxp://xxx.mio-sito.it/affitto-casa/regione/città/titolo-annuncio-id.html
In pratica io dovrei cambiare soltanto la stinga di URL /annunci-affitto/ in /affitto-casa/
Ovviamente le pagine
- regione.html
- Città.html
- titolo-annuncio-id.html
e le cartelle
- regione/
- città/
sono più di una (regione1.html, regione2.html, regione3.html ecc. e regione1/, regione2/, regione3/ ecc. ecc. ecc.)
Sarei davvero grato a chiunque può aiutarmi ad impostare delle regole su htaccess….
22:14
Salve,
purtroppo sono incappato in un hosting abbastanza “pessimo” ed ho un piccolo problema:
tutte le pagine senza “www” non vengono caricate.
Allora ho fatto questo:
Ho rediretto i DNS * e @ del mio sito sul mio ip statico dove sta in esecuzione xampp always on così da intercettare le richieste, e poi ho fatto una index.php che mi trasforma le richieste senza www in richieste con www tramite il codice:
putroppo non funziona come dovrebbe (a volte va, altre no).
A me servirebbe un “redirect wild card” da “http://sito.ext/*” a “http://www.sito.ext/*” per qualunque valore di * in PHP (file, sottocartelle, variabili), ed ho a disposizione tutto apache per farlo, ma non so come.
Mi potete aiutare?
Sarebbe una grande cosa se potesse essere “indipendente” dal dominio, cioè ogni richiesta del tipo sito1.ext, sito2.ext… si trasformi automaticamente in http://www.sito1…, anche se la cosa non è fondamentale.
Grazie.
22:19
Dimenticavo: ovviamente il sito NON si trova sul mio pc, devo solo “reindirizzare” la richiesta
19:30
[...] questo post di Benedetto, molto completo, su come impostare un redirect 301 attraverso i principali linguaggi [...]
15:04
Ciao,
io ho un problemino che ancora qui non ho visto trattato.
Ho delle url del tipo http://www.dominio.it/prova.php?titolo=parola con spazi
e voglio reindirizzare a
http://www.dominio.it/prova/parola-con-spazi/
Come si può fare con htaccess?
Grazie
Alessandro
16:21
Ciao, avrei questa esigenza,, effettuare un redirect 301 su server windows di file da http://www.miosito/esempio/Nome-Cartella/ a http://www.miosito/esempio/nome-cartella/ . In altri termini vorrei portare tutti gli url in minuscolo, senza rischiare di far indicizzare due volte i contenuti a google.
Grazie mille
Lorenzo