Redireción de un dominio a otro con urls diferentes
Carlos — Vie, 10/10/2008 - 13:36
En Ama Tu Salud, una de las webs hecha con Drupal y Ubercart que estamos a punto de publicar, queremos pasar la web del .com a un .es (la web se llama igual) para no perder el posicionamiento que ya tiene.
Por ejemplo queremos que
http://www.amatusalud.com/product_info.php?products_id=163 redireccione a
http://www.amatusalud.es/producto/stabilium-200
Esto se podría hacer con un mod_rewrite con una línea a mano por cada redirección (ya que no siguen un patrón común que pueda usar) pero por algún motivo no he logrado hacerlo bien. Lo que yo usaba era:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^amatusalud.com [NC]
RewriteRule ^product_info.php?products_id=163$ http://www.amatusalud.es/producto/stabilium-200 [L,R=301]
Con esto he probado mil cosas,, ponerle una / al principio de la url, quitarle la condición, cambiar el destino y poner uno del .com (bueno, mil cosas no han sido)
Pero cómo ya he comentado no me ha funcionado (algo debe estar mal). De todas maneras esto tenía el problema de que dependiendo de las redirecciones el .htaccess se puede hacer demasiado largo aunque tampoco tengo muy claro que grave podría ser esto.
Cómo alternativa propusieron gestionarlo mediante un fichero php que se encarga de hacer las redirecciones según la página solicitada.
Para esto lo primero que hay que hacer es conseguir que todas las solicitudes vayan al fichero en php que hace la redirección. Para esto ponemos en el .htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ redirect.php?$1 [L,QSA]
Ahora hay que crear un fichero php que contenga lo siguiente:
<?php
// De ht tp://skiffie. com/code/php/replace-once
function str_replace_count($search,$replace,$subject,$times) {
$subject_original=$subject;
$len=strlen($search);
$pos=0;
for ($i=1;$i<=$times;$i++) {
$pos=strpos($subject,$search,$pos);
if($pos!==false) {
$subject=substr($subject_original,0,$pos);
$subject.=$replace;
$subject.=substr($subject_original,$pos+$len);
$subject_original=$subject;
} else {
break;
}
}
return($subject);
}
$direcciones = array();
$handle = fopen("redirecciones.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$num = count($data);
$direcciones[$data[0]] = $data[1];
}
fclose($handle);
/*
echo '';
print_r($direcciones);
echo '';
*/
$_SERVER['QUERY_STRING'] = str_replace_count('&','?',$_SERVER['QUERY_STRING'],1);
//echo 'Dirección: ' . $_SERVER['QUERY_STRING'];
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: ht tp://www.nuevo-dominio.es/" . $direcciones[$_SERVER['QUERY_STRING']] );
//echo "Hay que redireccionar a ht tp://www.nuevo-dominio.es/" . $direcciones[$_SERVER['QUERY_STRING']] . '';
?>
(eh puesto un espacio en cada ocurrencia de http por que el filtro que usa este post le intentaba poner un enlace y me fastidiaba el código)
Tened en cuenta que todavía no lo he probado demasiado y que es algo hecho de forma rápida.
Ahora sólo falta crear un fichero csv (en mi caso lo he separado por punto y coma) en el que el primer parámetro sea el origen y el segundo el destino (en mi caso no he puesto los dominios). Algo así:
product_info.php/cPath/21/products_id/36;producto/aceite-de-onagra
product_info.php/cPath/21/products_id/188;producto/aceite-de-salmon-450-perlas-omega-3
En lugar de usar un fichero csv y llenarlo a mano también se podría, usando las bases de datos de las dos webs, hacer algo más automático aunque en nuestro caso no se podía ya que los títulos no siempre eran los mismos.
Aún no está en uso ya que la wen web no está "publicada" pero podéis ver que realmente hace el 301 (necesario para mantener el posicionamiento) usando esta herramienta y poniendo en el input http://www.amatusalud.es/redirect/product_info.php?products_id=163
Mira a ver si esto te
Nacho Morato — Vie, 10/10/2008 - 14:20Mira a ver si esto te soluciona algo.
http://pingv.com/blog/laura/200511/creating-301-redirects-for-drupal
http://drupal.org/node/16084
Un saludo
Yo lo que veo extraño es la
Limay (no verificado) — Vie, 10/10/2008 - 15:08Yo lo que veo extraño es la etiqueta de enlace en la dirección "nueva". ¿está así en el código original?
De todas maneras la opción de hacerlo con PHP me parece muy buena idea. Incluso puede ser más cómodo que con el "rewrite rule" si tienes muchas direcciones y las sacas de una base de datos ¿no?
Un saludo
@Nacho, mi problema era que
admin — Vie, 10/10/2008 - 15:21@Nacho, mi problema era que la url que quiero redireccionar tiene parámetros (o algunas lo podían tener)
@Limay Si te sale una etiqueta debe ser algo de la cache, a mi no me sale (o no la veo). Antes salía por que el filtro que tengo puesto si encuentra una url le mete un enlace. Y sí, si puedes sacar las url's de una base de datos mucho mejor y más rápido.
A ver cuando publicamos la
Jordi Bufí — Lun, 13/10/2008 - 14:56A ver cuando publicamos la "wen".
Esas Web esta echa en drupal.
sandra (no verificado) — Mar, 06/10/2009 - 15:01Esas Web esta echa en drupal.
Esta echa completamente en drupal o has tenido que modificarlo tocando las tripas de drupal ?
No he modificado casi nada,
Carlos — Mar, 06/10/2009 - 15:42No he modificado casi nada, tan sólo una cosa del template de los comentarios.
pues los template que he
Sandra (no verificado) — Mié, 07/10/2009 - 09:21pues los template que he visto no me dan esos resultados...
La verdad que ahora mirando resultados volvere a creer en Drupal :)
Ahh, perdona, pensaba que
Carlos — Mié, 07/10/2009 - 09:37Ahh, perdona, pensaba que decías este blog :P
Sí, Amatusalud tiene mucho trabajo detrás, de los templates y de programación de módulos.
Tu blog tambien esta
Sandra (no verificado) — Mié, 07/10/2009 - 09:40Tu blog tambien esta bonito... ya lo he dicho antes...... :)