mameyugo;

, 0 comentarios, 2307 lecturas, por: Jose Manuel Muras Rodrigo
comprobar redirecciones masivas automaticamente

Cuando tenemos un cambio de software o un cambio en el tipo de urls de tu dominio o incluso un cambio de dominio, es importante saber a donde van a ir las paginas que tenias antes y redireccionarlas a sus nuevos nombres, sobre todo para aprovechar posibles posicionamientos en buscadores, links de otras páginas y todas esas cosas tan importantes para poder seguir manteniendo el trafico de tu web.

Para ello tendremos que tener un listado en que tendremos las urls antiguas y las nuevas. Podemos hacer las redirecciones de varias maneras .htaccess (Apache) redirección por PHP

Pero el problema gordo viene después de hacer todas estas redirecciones, hay que comprobarlas una a una y es un trabajo realmente agotador, ya que dependes de muchos factores: la cache de navegador, los despistes, que somos humanos y posibles errores de la herramienta que utilicemos como firebug (pestaña de red).

Bien pues para ahorrarnos ese trabajo solo tenemos que tener un archivo con 2 columnas una la url vieja y otro columna la nueva separadas por un tabulador.

He preparado este sencillo código que hace uso de la librería curl con el que podremos manejar las cabeceras de la página:

GeSHi © 2004-2007 Nigel McNie, 2007-2010 Benny Baumann, 2008-2009 Milian Wolff
  1. <?php
  2.  
  3. function comprueba($url,$codigo_pretendido=200,$url_pretendida='',$dominio=''){
  4.     $ch = curl_init();
  5.     // Establecer URL
  6.     curl_setopt($ch, CURLOPT_URL, $url);
  7.     // establecemos que no devuelva el header en el output
  8.     curl_setopt($ch, CURLOPT_HEADER, 0);
  9.     // solo devuelve el html si se lo pedimos explicitamente,
  10.     // sino saldria por pantalla
  11.     curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  12.     // Ejecuta la llamada
  13.     curl_exec($ch);
  14.     // Cerrar el recurso cURL y liberar recursos del sistema
  15.     if(!curl_errno($ch)){
  16.         // devuelve toda la informacion posible de la petición
  17.         $info = curl_getinfo($ch);
  18.        
  19.         $error=false;
  20.         if($info['http_code']!=$codigo_pretendido){
  21.             echo "CODIGO ERROR ".$url."\t #### ".$info['http_code']."\n";
  22.             $error=true;
  23.         }
  24.         $url_final=str_replace($dominio,'',$info['redirect_url']);
  25.         if($url_final!=ltrim($url_pretendida,'/')){
  26.             $url=str_replace($dominio,'',$url);
  27.             $url_final=str_replace($dominio,'',$info['redirect_url']);
  28.             echo "URL ERROR ".$url_pretendida." ### ".$url_final."\n";
  29.             $error=true;
  30.         }
  31.         if($error==false){
  32.             echo "CORRECTA  ".$url.' correcta'."\n";
  33.         }
  34.     }else{
  35.         echo $url.' ERROR en la llamada'."\n";
  36.     }
  37.     curl_close($ch);
  38. }
  39. $dominio="http://www.dominio.com/";
  40. $redirecciones=file('redirecciones.txt');
  41. foreach($redirecciones as $fila){
  42.     $explode=explode("\t",$fila);
  43.     $explode[1]=str_replace("\n",'',$explode[1]);
  44.     $explode[1]=str_replace("\r",'',$explode[1]);
  45.     if($explode[0]==$explode[1]){
  46.         echo "CORRECTA  son la misma url \n";
  47.     }else{
  48.         comprueba($dominio.ltrim($explode[0]),301,$explode[1],$dominio);
  49.     }
  50. }
  51.  
  52. ?>
Se puede modificar facilmente para que funcione con un CSV
programacion
Unete!