- Home
- Categorie
- Digital Marketing
- Posizionamento Nei Motori di Ricerca
- Redirect 301 va in conflitto con il Rewrite di Wordpress??
-
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=588Io ho rifatto il sito in Wordpress, e ho attivato il mod_rewrite per riscrivere gli url così:
dominio. ext /nomepaginaOra 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=588non vengo indirizzato a [prefisso]*.dominio. ext/nomepagina
ma a [prefisso]. dominio. ext/?page=pages&pid=588Ho 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
-
Per fare redirect di URL con querystring non puoi usare la direttiva "redirect 301", ma devi usare delle RewriteRule e RewriteCond.
-
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...
-
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]
-
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-nuovoQuindi, 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?
-
Potrebbe essere che il tuo host non ti consente di farlo a livello di .htaccess quindi dovresti provare nel virtualhost.
-
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?
-
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/ " ?
-
No nel query string non puoi accodarle.
Devi usare degli operatori logici o specificare una ulteriore QUERY_STRING
-
Togli il match con la variabile che è rappresentata dal %1.
-
Ed è quello che ho pensato subito io...
togliere il %1.
Ma le mostra lo stesso
-
Di che variabili parli?
-
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 **%1ma il risultato non cambia, cioè continua a scrivermi /nomepagina/?page=pages&pid=588
**
-
Nella condizione sulle querystring hai utilizzato un operatore logico che dice se è questo + quello?
-
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
**
-
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 &