2012-04-13 52 views
6

Estoy intentando averiguar cómo hacer una redirección 301 en mi archivo htaccess para redirigir algunos archivos a un nuevo dominio. Esto es lo que necesito saber cómo hacerlo:301 redirigir desde una URL con una cadena de consulta a un nuevo dominio con una cadena de consulta diferente

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

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

Las redirecciones no tienen que ser creados de forma automática. Puedo codificar las páginas que necesito redirigir en el archivo htaccess, simplemente no sé el formato que debo usar, ya que he leído que un redireccionamiento 301 "estándar" no funcionará con las cadenas de consulta.

Básicamente esto es lo que quiero hacer, pero de mi investigación hasta ahora no parece que se pueda hacer de esta manera.

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

Respuesta

18

se puede utilizar una regla de reescritura con una condición de coincidencia cadena de consulta, tales como:

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] 

Pedido this blog page para más información sobre cómo funciona esto.

+0

Genial. ¡Gracias por tu ayuda! –

+0

Tuve el mismo problema. Tengo curiosidad por saber por qué el simple redireccionamiento 301 ... no funciona, como parece, según mi google. – GDP

0

Tuve el mismo problema, pero aún más complicado, porque necesitaba descartar otros parámetros.

De esta manera: my-old-page.php?a=1&b=2&c=3

Tengo que utilizar una de las cuerdas y descartar los otros, pero esa solución sólo funcionaba si quiero usar el último parámetro (c = 3). Si quiero utilizar cualquier otro (a = 1 ó b = 2) se ejecuta a un 404. Después de mucha lucha y buscar, encontré una respuesta:

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

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

La solución es añadir ".*?" antes y después de la parámetro a usar.

No sé si esta es la mejor solución, pero funciona.

Cuestiones relacionadas