Problema redirect 301 in htaccess

Buongiorno a tutti!

Ho la necessità di cambiare la struttura degli URL e di segnalarlo a Google tramite un redirect 301 per evitare di perdere i benefici acquisiti nel posizionamento.

L'URL iniziale era del tipo :

http://sito/product/stringa/stringa/cifra/cifra.html 

ed è diventato cosi : 

http://sito/product/cifra/stringa.html

Dall'htaccess era presente questa condizione prima : 

RewriteRule ^(product)/[^/]+/[^/]+/(\d+)/(\d+).html$ index.php?page=$1&tid=$2&pid=$3

modificato in questo modo : 

RewriteRule ^(product)/(\d+)/(.*).html$ index.php?page=$1&pid=$2

Tutto fin qui funziona alla perfezione! Nel sito vengono mostrati i nuovi URL e le pagine sono perfettamente accessibili. Ora il problema arriva quando provo a creare la regola per il redirect 301, usando questa regola per far si che i vecchi indirizzi siano trasformati nei nuovi:

RewriteRule ^/(product)/(.*)/(.*)/(\d+)/(\d+).html$ /$1/$5/$3.html [L,NC,R=301]


Ho l'impressione che la regola non funziona, poiché quando accedo all'indirizzo visualizzo sempre la vecchia pagina, per di piu' se elimino la regola RewriteRule ^(product)/[^/]+/[^/]+/(\d+)/(\d+).html$ index.php?page=$1&tid=$2&pid=$3 la pagina non viene proprio affissa.

Sapete dirmi cosa sbaglio? Ho provato anche cosi ovviamente :

RewriteRule ^/(product)/(.*)/(.*)/(\d+)/(\d+).html$ http://sito/$1/$5/$3.html [L,NC,R=301]

ma non cambia nulla! 

inviato 5 anni fa
Amido
nessuno ha idea di come fare allora? :'(Amido 5 anni fa
X 0 X

Scusa, ma perché non usi la stessa espressione regolare che usavi prima??

risposto 5 anni fa
Massimiliano Arione
In che senso? Non ho capito cosa intendi dire! :)Amido 5 anni fa
Hai riportato la regola di rewrite che usavi prima e poi quella che ora vorresti usare per fare il 301: non sono uguali. Perché?Massimiliano Arione 5 anni fa
Magari mi sono spiegato male, spiego per esempi forse è meglio! Allora, in partenza ho un URL fatto cosi: http://www.example.com/product/blabla/c-253/3/325.html l'ho trasformato in un URL cosi : http://www.example.com/product/325/c-253.html . Ora, questi URL a loro volta hanno le regole che ho specificato sopra (la prima e la seconda) nel file htaccess per redirigere ad una pagina. Adesso, dal momento che Google ha indicizzato parecchi indirizzi del primo tipo, vorrei che questi indirizzi (come il primo link messo)facciano dei redirect 301 verso i secondi e per questo ho generato quella regolaAmido 5 anni fa
Per intercettare l'url http://www.example.com/product/blabla/c-253/3/325.html usavi questa regexp (la copio dal tuo primo post): ^(product)/[^/]+/[^/]+/(\d+)/(\d+).html$ poi però per fare il 301 usi questa ^/(product)/(.*)/(.*)/(\d+)/(\d+).html$ la mia domanda quindi era: perché non usi la stessa regexp di prima?Massimiliano Arione 5 anni fa
hai ragione, l'ho modificata durante uno dei tentativi per capire perché non funzionasse il redirect! Era giusto per vedere se cosi funzionava, ma niente da fare! Considera come se quella iniziale è usata anche dopo!Amido 5 anni fa
Sei sicuro di aver tolto la vecchia regola?Massimiliano Arione 5 anni fa
All'inizio si, poi sono stato costretto a rimetterla poiché altrimenti mi rimandava alla homepage.Amido 5 anni fa
Non so se sia questo il problema, ma credo che possa essere il fatto che in pratica io redirigo tramite 301 alla nuova pagina, che a sua volta ha una regola htaccess che redirige ad un'altra! Potrebbe essere questo per caso?Amido 5 anni fa
be', allora devi assicurarti che la regola col 301 sia prima di quella vecchia, altrimenti non la prende.Massimiliano Arione 5 anni fa
il 301 è un conto, la riscrittura "liscia" è un altro. Il primo fa un redirect, cioè arrivi alla vecchia pagina e vieni dirottato su quella nuova. Il secondo invece ti fa "vedere" un URL con un indirizzo diverso.Massimiliano Arione 5 anni fa
è posta prima la regola.. provo a linkarti il mio htaccess! nopaste.info/7a9f2604f3.htmlAmido 5 anni fa
qualche idea di quale possa essere il problema? :) La cosa che mi fa strano è che il redirect non si effettua proprio! Mi visualizza la pagina come da link precedente...Amido 5 anni fa
X 0 X

Ho risolto! In realtà mi ero semplicemente piantato sugli indici dell'espressione regolare, avevo strutturato tutto bene :) 

Il problema era dato da questa espressione : 

RewriteRule ^(product)/[^/]+/[^/]+/(\d+)/(\d+).html$ /$1/$5/$3.html [L,NC,R=301]

perché erroneamente consideravo anche i [^/] come indici, mentre in realtà in questa espressione ce ne sono solo 3. Dunque ponendo :

RewriteRule ^(product)/[^/]+/[^/]+/(\d+)/(\d+).html$ /$1/$3/$2.html [L,NC,R=301]

il tutto funziona perfettamente :) Grazie comunque per il supporto!

risposto 5 anni fa
Amido
X 0 X X
Effettua l'accesso o registrati per rispondere a questa domanda

Domande simili