Mie 19 Sep 2007
Mod rewrite y redirecciones 301
Escrito por infinit categorizado en Programación , Informática general , Entorno webEsto no es un tutorial de Mod rewrite, si no más bien de como realizar redirecciones 301 correctamente y sin perder la indexación que teniamos al reescribir las urls en nuestra web.
Si quieres aprender sobre Mod rewrite puedes visitar este escrito de Aeoris.
La mayorÃa de gente, cuando reescribe sus urls, cambia los enlaces de la web a estas, y se olvida de las anteriores páginas, grave error, ya que Google leerá las dos páginas y seguramente las tomará como contenido duplicado, con su correspondiente penalización. La forma de evitarlo es redireccionando la página antigua a la nueva, pero no de cualquier forma, si no dando el mensaje de Movida permanentemente (Moved Permanently), y el número de error 301.
Para realizar una redirección en PHP tenemos que añadir el siguiente código.
header("HTTP/1.1 301 Moved Permanently");
header('Location: http://www.web.com/url/destino.html');
Recueda que al enviar unas cabeceras, no se debe haber manado contenido anteriormente, a si que esto serÃa lo 1º que deberia de haber en el código fuente de la página (Antes incluso que o cualquier texto, incluso espacios en blancos).
Esto está muy bien si la página a la que enviamos la redirección no es la misma a la que se accede, la mayorÃa de las veces, sólo se cambian las URLs pero se mantienen los archivos, si ponemos esto en la página, se creará un bucle infinito donde siempre se manda la redirección a la misma página. Un ejemplo claro de esto serÃa el siguiente.
Con el .htaccess hacemos que al entrar en mi-nueva-pagina.html nos ejecute mipagina.php, pero deseamos que al entrar en mipagina.php nos mande a mi-nueva-pagina.html
.htaccess
RewriteEngine On
RewriteRule ^mi-nueva-pagina.html mipagina.php
mipagina.php
< ?php
if (substr($_SERVER['REQUEST_URI'], -3) == 'php') {
header("HTTP/1.1 301 Moved Permanently");
header('Location: mi-nueva-pagina.html');
}
?>
En este simple código hacemos una comprobación de extensión, como nuestra nueva página es .html, y la antigua es php, solo con comprobar esto ya nos bastarÃa, si este no es tu caso tienes que inginartelas para saber cuando se entra por la dirección reescrita, una buena y fácil solución es meter una variable, quedando el rewrite rule de este modo:
RewriteRule ^mi-nueva-pagina.html mipagina.php?reescrita=true
Después simplemente es una comprobación de que la variable $_GET[’reescrita’] existe.
Esto es todo, cualquier duda o cosa que querais que aclare más, podeis dejarla en los comentarios.