• User

    Redirect 301 va in conflitto con il Rewrite di Wordpress??

    Ciao a tutti,
    ho appena terminato di rifare un sito per un amico.
    Il vecchio sito era fatto con un CMS.
    La struttura delle pagine era:
    dominio. ext /index.php?page=pages&pid=588

    Io ho rifatto il sito in Wordpress, e ho attivato il mod_rewrite per riscrivere gli url così:
    dominio. ext /nomepagina

    Ora volevo fare dei redirect 301 per reindirizzare le pagine del sito precedenti a quelle nuove.

    Quindi ho aggiunto al file .htaccess

    redirect 301 /index.php?page=pages&pid=588 [prefisso]*.dominio. ext/nomepagina
    (dove nomepagina corrisponde al contenuto presente alla vecchia pagina con id 588)

    in coda alle direttive create da wordpress.
    Cioè:

    BEGIN WordPress

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ -
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php
    </IfModule>

    END WordPress

    Redirect 301 /index.php?page=pages&pid=588 [prefisso]*.nomedominio. ext/nomepagina/

    Però il redirect non funziona.
    Cioè, se provo a digitare
    [prefisso].dominio. ext/index.php?page=pages&pid=588

    non vengo indirizzato a [prefisso]*.dominio. ext/nomepagina
    ma a [prefisso]. dominio. ext/?page=pages&pid=588

    Ho pensato, nella mia ignoranza, che fosse "colpa" del mod_rewrite di Wordpress.
    E allora ho spostato il redirect 301 PRIMA del RewriteRule, pensando che forse fosse quello il problema (cioè che in qualche modo l' htaccess elaborasse già le chiamate escludendo la parte index.php )

    Il risultato, purtroppo, non cambia.
    La cosa è strana, perchè se provo invece a scrivere
    redirect 301 /calzino.php [prefisso]*.nomedominio. ext/test/
    (inventando un nome pagina immaginario, DIVERSO DA index.php+variabili)

    l'htaccess si comporta correttamente!!

    Ora, secondo voi, quale può essere il problema?

    Segnalo che sono su Aruba, con hosting linux.

    Avete mai avuto un problema simile?

    Grazie a chi mi vorrà dare una mano!
    ZuX

    *[prefisso] = l'accattp-//-www


  • Admin

    Per fare redirect di URL con querystring non puoi usare la direttiva "redirect 301", ma devi usare delle RewriteRule e RewriteCond.


  • User

    Ah, ecco.
    Però ottengo lo stesso risultato del redirect 301?
    L'obiettivo prefissato è quello di non perdere (completamente) i posizionamenti e i rank ottenuti dal vecchio sito; con questo sistema riesco ad ottenere la stessa cosa?

    Ho comunque provato a fare:

    RewriteRule ^nomepagina/$ /index.php?page=pages&pid=588

    Ma non funziona...


  • Admin

    Devi fare una cosa simile.

    Per farlo diventare un 301 basta aggiungere tra parentesi quadre R=301.

    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/paginetta\.php$
    RewriteCond %{QUERY_STRING} ^p=([0-9]*)$
    RewriteRule ^(.*)$ http://www.miosito.com/paginetta/%1 [R=301,L]
    

  • User

    Buongiorno Juanin,
    innanzitutto **grazie **per l'aiuto.

    Ho provato il tuo codice, ma non funziona.
    Ho anche provato ad eliminare quello di Wordpress, giusto per test... ma non va.

    Le tue istruzioni dicono (correggimi se sbaglio):
    Se la pagina è paginetta.php
    e ci sono variabili, (nel caso scritto da te p=un-numero
    Allora riscrivi questa pagina in -->url-nuovo

    Quindi, se la logica è corretta, io dovrei scrivere:

    RewriteCond %{REQUEST_URI} ^/index.php$
    RewriteCond %{QUERY_STRING} ^page=pages&pid=([0-9])$
    RewriteRule ^(.
    )$ dominio/paginetta/%1 [R=301,L]

    Però così - appunto - non funziona.

    Cosa sbaglio?


  • Admin

    Potrebbe essere che il tuo host non ti consente di farlo a livello di .htaccess quindi dovresti provare nel virtualhost.


  • User

    Il sito è su Aruba, hosting (ovviamente 🙂 ) Linux.
    Strano, il file .htaccess di Wordpress funziona egregiamente..

    Però la logica che ho descritto sopra, e l'esempio modificato, è corretto?

    Cioè, la url "vecchia" ha questa seguenza (strana, tra l'altro) di variabili, page=pages&pid=*numero .
    *Nella RewriteCond %{QUERY_STRING} è corretto inserirle tutte?

    L'altro mio problema è il seguente:

    Ho circa 60 pagine da re-indirizzare. Ovviamente ognuna ad una pagina.
    Quindi, invece di usare ([0-9]*) dovrei usare un numero preciso (es: 45) che dovrò redirezionare ad una url precisa (esempio: /fantasia/)

    Basterà sostituire la parte della espressione regolare ([0-9]*) con il numero?


  • User

    Forse ci siamo:

    Ho scoperto che rischia di essere un problema di forma:
    Praticamente su Aruba per ogni "/" bisogna anteporre un ""

    Ora però ho un piccolissimo problema, poi - lo giuro - non rompo più.

    La direttiva mi riscrive l'url in questo modo:

    dominio / nomepagina / variabili

    Come faccio a non fargli scrivere più nessuna variabile dopo il " nomepagina/ " ?


  • Admin

    No nel query string non puoi accodarle.

    Devi usare degli operatori logici o specificare una ulteriore QUERY_STRING


  • Admin

    Togli il match con la variabile che è rappresentata dal %1.


  • User

    Ed è quello che ho pensato subito io...
    togliere il %1.
    Ma le mostra lo stesso 😞


  • Admin

    Di che variabili parli?


  • User

    Parlo di questo:

    la url che devo trasformare è
    index.php**?page=pages&pid=588

    **in

    /nomepagina/

    esattamente così.

    Con le istruzioni di cui stiamo parlando il mod_rewrite scrive:

    /nomepagina/?page=pages&pid=588

    Io ho provato a togliere da
    RewriteRule ^(.*)$ dominio/paginetta/%1 [R=301,L]
    il **%1

    ma il risultato non cambia, cioè continua a scrivermi /nomepagina/?page=pages&pid=588

    **


  • Admin

    Nella condizione sulle querystring hai utilizzato un operatore logico che dice se è questo + quello?


  • User

    Io ho questa situazione:

    RewriteCond %{REQUEST_URI} ^/index.php$
    RewriteCond %{QUERY_STRING} ^page=pages&pid=(588)$
    RewriteRule ^(.*)$ dominio/nomepagina/ [R=301,L]

    In questa situazione la riscrittura è

    /nomepagina/**?page=pages&pid=588

    **


  • Admin

    Non puoi matchare 2 condizioni come ti ho detto sopra

    RewriteCond %{QUERY_STRING} ^page=pages&pid=(588)$

    Devi usare un operatore logico che divida le due variabili divise da &