Pregunta

Estoy tratando de redirigir páginas de varios dominios antiguos en un dominio nuevo de una página a otra, es decir:

página 1: http://www.example.org/default.asp? id = 1 redirige a http://www.example2.org/newpage.html página 2: http://www.example2.org/default.asp?id=2 redirige a http://www.example.org/contact.html

... y así sucesivamente. Cada página anterior redirigirá a una página nueva específica.

He intentado escribir algo en .htaccess siguiendo las líneas de

Redirect 301 http://www.example.org/default.asp?id=1 h-tp://www.example.org/newpage.html
Redirect 301 http://www.example2.org/default.asp?id=2 h-tp://www.example.org/contact.html

Pero no hubo suerte hasta ahora. mod_alias está habilitado ...

También intenté usar RewriteCond y RewriteRule de esta manera:

RewriteCond %{HTTP_HOST} example.org
RewriteRule default.asp?id=1 http://www.example.org/newpage.html [NC,L,R=301]
...

En otras palabras: quiero hacer un redireccionamiento página por página de id. a alias junto con una combinación de tres sitios / dominios en un sitio.

Espero que haya una solución útil. Gracias de antemano!

¿Fue útil?

Solución

El Redirect la directiva solo funciona con la ruta URL pero no el host o consulta de la URL.

Pero es posible con mod_rewrite :

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} =id=1
RewriteRule ^default\.asp$ http://www.example.org/newpage.html [NC,L,R=301]

Y como ya se dijo en los comentarios, puede usar una reescribir map para la asignación de ID a alias:

1 foo-page
2 bar-page
3 baz-page
…

La declaración RewriteMap (aquí un simple archivo de texto sin formato):

RewriteMap id-to-alias txt:/absolute/file/system/path/to/id-to-alias.txt

Y finalmente la aplicación:

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3}&%1%4 ^([^&]+)&(.*)
RewriteRule ^default\.asp$ http://www.example.org/%1.html?%2 [NC,L,R=301]

Eso también debería preservar la consulta restante. Si no quieres eso:

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3} .+
RewriteRule ^default\.asp$ http://www.example.org/%0.html? [NC,L,R=301]

Otros consejos

Una buena alternativa a mod_rewrite es usar el idioma con el que se sienta más cómodo y poner la lógica en su script. Apunte todas las URL que desea redirigir a su controlador frontal simple.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

Y luego, en redirect.php:

<?php
if (

Una buena alternativa a mod_rewrite es usar el idioma con el que se sienta más cómodo y poner la lógica en su script. Apunte todas las URL que desea redirigir a su controlador frontal simple.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

Y luego, en redirect.php:

<*>SERVER['SCRIPT_URL'] == '/default.asp'){ $map = array( 1 => '/newpage.html', 2 => '/contact.html' ); if (isset(

Una buena alternativa a mod_rewrite es usar el idioma con el que se sienta más cómodo y poner la lógica en su script. Apunte todas las URL que desea redirigir a su controlador frontal simple.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

Y luego, en redirect.php:

<*>GET['id'])){ $id =

Una buena alternativa a mod_rewrite es usar el idioma con el que se sienta más cómodo y poner la lógica en su script. Apunte todas las URL que desea redirigir a su controlador frontal simple.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

Y luego, en redirect.php:

<*>GET['id']; if (isset($map[$id])){ header('HTTP/1.1 301 Moved Permanently', true, 301); header('Location: http://'.

Una buena alternativa a mod_rewrite es usar el idioma con el que se sienta más cómodo y poner la lógica en su script. Apunte todas las URL que desea redirigir a su controlador frontal simple.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

Y luego, en redirect.php:

<*>SERVER['HTTP_HOST'].$map[$id]); exit; } } } // ... handle another/path/to_some_file.ext here, or other domains, or whatever ... // If we get here, it's an invalid URL header('HTTP/1.1 404 Not Found', true, 404); echo '<h1>HTTP/1.1 404 Not Found</h1>'; echo '<p>The page you requested could not be found.</p>'; exit; ?>

Simplemente agregue más información

Las directivas de redireccionamiento del OP probablemente estén en un formato incorrecto - del documento relevante de apache página :

  

La directiva Redirect asigna una URL antigua   en uno nuevo pidiéndole al cliente que   recuperar el recurso en el nuevo   ubicación.

     

La ruta URL anterior distingue entre mayúsculas y minúsculas   (% -decoded) ruta que comienza con un   barra oblicua . Una ruta relativa no es   permitido. La nueva URL debe ser un   URL absoluta que comienza con un esquema   y nombre de host. Ejemplo:

Redirect /service http://foo2.bar.com/service

Entonces eso lo haría:

Redirect 301 /default.asp?id=1 http://www.example.org/newpage.html

Espero que ayude

En httpd.conf:

RedirectPermananent URL1 URL2

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top