2012-04-13 5 views
6

Sto cercando di capire come eseguire un reindirizzamento 301 nel mio file htaccess per reindirizzare alcuni file in un nuovo dominio. Ecco cosa ho bisogno di sapere come fare:301 reindirizzamento dall'URL con stringa di query al nuovo dominio con stringa di query diversa

vecchio URL: http://www.example.com/index.php?page=news&id=2366

NUOVO URL: http://www.example2.com/news.php?name=23546

i reindirizzamenti non devono essere creati automaticamente. Posso eseguire l'hard-code delle pagine che devo reindirizzare nel file htaccess, ma non conosco il formato da utilizzare poiché ho letto che un reindirizzamento 301 "standard" non funziona con le stringhe di query.

Fondamentalmente questo è quello che voglio fare, ma dalle mie ricerche finora non sembra che possa essere fatto in questo modo.

redirect 301 /index.php?page=news&id=2366 http://www.example2.com/news.php?name=23546 

risposta

18

Si potrebbe utilizzare una regola di riscrittura con una stringa di query partita condizioni, come ad esempio:

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/index.php$ 
RewriteCond %{QUERY_STRING} ^page=news&id=2366$ 
RewriteRule ^(.*)$ http://www.example2.com/news.php?name=23546 [R=301,L] 

Checkout this blog page per ulteriori informazioni su come funziona.

+0

Grande. Grazie per l'aiuto! –

+0

Ho avuto lo stesso problema - Sono curioso del perché il semplice reindirizzamento 301 ... non funziona come sembra dovrebbe essere secondo tutti i miei googling. – GDP

0

Ho avuto lo stesso problema, ma ancora più complicato, perché avevo bisogno di scartare altri parametri.

Ti piace questa: my-old-page.php?a=1&b=2&c=3

Ho bisogno di usare una delle stringhe e scartare gli altri, ma questa soluzione ha funzionato solo se voglio usare l'ultimo parametro (c = 3). Se voglio usare altri (a = 1 oppure b = 2) viene eseguito ad una 404. Dopo molte lotta e la ricerca, ho trovato una risposta:

RewriteCond %{QUERY_STRING} ^.* ?b=2.* ?$ (without space after the *) 

RewriteRule (.*) http://www.my-webpage.php/new-location-2? [R=301,L] 

La soluzione è quella di aggiungere ".*?" prima e dopo la parametro da usare.

Non so se questa è la soluzione migliore, ma funziona.