Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Redirect 301 o mod_rewrite?

    Salve a tutti, mi sono appena iscritto a questo bel forum, dopo averlo letto tante volte. Ho un problema che non riesco a risolvere , magari qui trovo la luce

    PROBLEMA
    Sto trasferendo il mio blog (dBlog, CMS di Marlenek, ASP) su wordpress, e quindi anche da server Windows a Linux.

    Il vecchio blog ha circa 160 post, ognuno con URL con querystring, mentre gli stessi post che ho già copiato su wordpress hanno la URL con parole chiave del post.

    Per spiegarmi meglio:
    URL di un post del vecchio blog:
    http://www.travelbaila.it/dblog/arti...sp?articolo=63

    URL dello stesso post sul nuovo blog
    http://lnx.travelbaila.it/manaus-e-il-sogno-perduto-30/

    Prima di cancellare il vecchio blog e trasformare il "lnx" del nuovo blog in "www", vorrei non perdere il traffico presente sui vecchi URL.

    Ho letto tanto sul web, ma trovo sempre 2 soluzioni e non so quale sia più adatta la mio caso.

    Soluzione 1
    Intervenire solo nel file .htaccess, con il comando redirect permanent (o redirect 301)

    Soluzione 2
    Usare il mod_rewrite, come la guida sopra citata, ma questo mi appare assai più difficile per le mie conoscenze.

    DOMANDA
    Se usassi solo la soluzione 1 (redirect 301), e nel file .htaccess scrivessi una linea di comando per ognuno dei 160 post, Google capirebbe? Cioè, per l'esempio del post citato, scriverei nel file .htaccess questo comando:

    Redirect permanent /travelbaila.it/dblog/articolo.asp?articolo=63 http://www.travelbaila.it/manaus-e-il-sogno-perduto-30/

    Chi mi sa aiutare? Ho perso giorni leggendo, e sono ancora in alto mare....

    Grazie mille!

  2. #2
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Con Redirect/RedirectMatch non lo puoi fare perchè non prendono in considerazione la querystring, che è l'unica cosa che distingue un URL da un altro nel tuo vecchio blog.
    Con mod_rewrite sono minimo 2 rule per ogni URL se non fai un controllo dell'url:
    codice:
    RewriteCond %{QUERY_STRING} ^articolo=1
    RewriteRule . http://dominio/link1/? [R=301,L]
    RewriteCond %{QUERY_STRING} ^articolo=2
    RewriteRule . http://dominio/link2/? [R=301,L]
    etc..
    Aggiungendo un controllo dell'url sarebbero 3, ne risparmi qualcuna facendo così:
    codice:
    RewriteCond %{REQUEST_URI} ^/dblog/articolo\.asp
    RewriteCond %{QUERY_STRING} ^articolo=([0-9]*)
    RewriteRule . - [E=idperred:%1]
    
    RewriteCond %{ENV:REDIRECT_idperred} 1
    RewriteRule . http://dominio/link1/? [R=301,L]
    RewriteCond %{ENV:REDIRECT_idperred} 2
    RewriteRule . http://dominio/link2/? [R=301,L]
    In entrambi i casi le rule inserite sono troppe, soprattutto se usi htaccess e non puoi modificare direttamente la configurazione del virtualhost.
    Io farei così, aggiungi una sola rule:
    codice:
    RewriteRule /dblog/articolo\.asp redirect.php [QSA,L]
    Nel file redirect.php (o come lo chiamerai) metti un array con le corrispondenze idarticolo/url e fai il redirect via php

  3. #3
    Ciao Enoa, grazie per la risposta, e complimenti per l'avatar!

    Proprio ieri, mentre navigavo alla disperata ricerca di informazioni, mi sono imbattuto in alcuni ottimi articoli che spiegano bene la differenza fra Redirect 301 e url Rewrite.

    Per il mio caso specifico, credo mi serva proprio un Redirect 301 !

    Riporto ciò che ho appreso da quegli articoli (spero si possa fare qui):

    REDIRECT 301
    Con il redirect 301 comunichiamo al client, sia esso un browser o uno spider dei motori di ricerca, che una determinata pagina web è stata trasferita ad un nuovo indirizzo in modo permanente.
    Lo spider, basandosi appunto sul response code 301 avrà dunque modo di capire che non ha più senso mantenere nel suo indice il vecchio indirizzo della pagina e che anzi dovrà sostituirlo con quello nuovo.
    http://www.regole-seo.com/redirect-301-pagerank
    REWRITE URL
    con l’url rewrite avreste due indirizzi in grado di generare lo stesso contenuto: la url nuova (seo friendly) e quella vecchia che probabilmente è già presente nei link di altri siti e nelle SERP dei motori di ricerca.
    http://www.regole-seo.com/rewrite-url
    Insomma, dopo un periodo di tempo (qualche settimana al massimo) io cancellerò il vecchio blog, lasciando solo il nuovo (e così evito i contenuti duplicati). Quindi ho bisogno di un redirect definitivo, e non lasciare in piedi i vecchi link.

    Secondo te ho capito bene?
    Ti ringrazio ancora per la gentile risposta, buona giornata

  4. #4
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Ciao travelbaila,
    la definizione di Rewrite che hai riportato è incompleta, il flag R forza un redirect
    http://httpd.apache.org/docs/current...gs.html#flag_r
    la query string, nel tuo caso ?articolo=X , verrà passata al nuovo url grazie al flag QSA
    http://httpd.apache.org/docs/current....html#flag_qsa

    Il punto è che l'htaccess viene caricato e valutato ad ogni singola visualizzazione, siano essi URL nuovi o vecchi.
    Se tu potessi mettere le rule nella configurazione del virtualhost sarebbe già meglio, ma sono comunque tante e diventeranno inutili entro poco tempo. Senza contare che wordpress è un semi-pachiderma
    Mi pare di capire che hai accesso alle configurazioni, oppure no?

    la soluzione che ti ho proposto via php secondo me è la strada migliore, da php poi invii gli header corretti per informare il browser/bot/crawler che quello è un "Redirect Permanent", ad esempio:
    codice:
    <?php
    $articolo = (isset($_GET['articolo']) && is_numeric($_GET['articolo'])) ? $_GET['articolo'] : 0;
    
    $array_redirect = array(
    1=>'http://dominio/link1',
    2=>'http://dominio/link2',
    //idarticolo_vecchio => corrispondente url nuovo
    );
    
    if($articolo>0 && isset($array_redirect[$articolo])){
    header("HTTP/1.1 301 Moved Permanently");
    header('Location: '.$array_redirect[$articolo]);
    header("Connection: close");
    }else{
    header('Location: http://dominio/');
    header("Connection: close");
    }
    
    ?>
    La regola e lo script "impegnano il server" solo nel caso venga richiesta una url vecchia e non un nuova. (la regola in realtà viene comunque valutata, ma è solo una e nel caso di nuovi url verrà ignorata).

    Quando fai la migrazione non puoi lasciare il vecchio contenuto, altrimenti quali sarebbero gli url-vecchi e quali quelli di destinazione? Quando migri, migri

  5. #5
    Ciao Enoa,
    ti ringrazio di nuovo per il tempo dedicatomi.

    Riscontro però che ho ancora molto da studiare, poichè la soluzione che mi hai proposto è per me decisamente difficile :-(

    Nel frattempo, almeno mi stai sfoltendo ciò da studiare, se mi dici di proseguire per la strada php che mi hai descritto anzichè, come invece pensavo io, intervenire solo sul htaccess con il redirect 301.

    Ultima novità (di poco fa): ho trovato un plugin (anzi due) di WP che, pare, serve appunto per il mio scopo.

    http://wordpress.org/extend/plugins/wp-301/
    http://wordpress.org/extend/plugins/redirection/

    Ora li vorrei provare perchè, se funzionassero, mi risolverebbero il problema senza ulteriori grattacapi!

    Speriamo bene...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.