Redirección 301
He movido recientemente el contenido de esta web a un nuevo servidor, lo que me ha supuesto tener que contender con un par de problemas que no por sencillos han de ser de solución trivial para no avezados a manejarse con el código. Por otro lado imagino deben ser relativamente comunes, por lo que me ha parecido correcto publicar las soluciones a las que he llegado.
El primero deriva de un cambio en la estructura de las url de acceso a las páginas. El antiguo servidor, a pesar de ser Apache, no admitía habilitar la función mod_rewrite. Este módulo en esencia permite aplicar un filtro a las peticiones de páginas y traducir las direcciones a un formato más elegante. Numeroso software, entre el que se incluye Wordpress, tienen posibilidad de utilizarlo para ocultar la farragosa línea de acceso a sus entradas en la que se le pasa el título (o identificador) de ésta como parámetro. Me explico: si nuestra página se llama Redirección 301, para acceder a ella habría que teclear en el navegador
http://www.atril.org/phineus/index.php?p=142
El identificador es poco indicativo del contenido de la entrada, y Wordpress permite corregir esto indicando que los títulos serán de la forma index.php?%postname%, con lo que nuestra página también sería accesible desde
http://www.atril.org/phineus/index.php?redirección-301
No obstante, indefectiblemente debemos pedir que se ejecute el archivo index.php e indicarle a éste qué contenido debe enviar al cliente. Mod_rewrite nos permite, si tenemos permiso de acceso a los ficheros .htaccess, dirigir cualquier url hacia index.php, con lo que las direcciones de nuestras páginas tienen la forma, mucho más elegante, de
http://www.atril.org/phineus/redirección-301
Adicionalmente obtemenos otra ventaja. Los buscadores consideran esta página como estática, en lugar de lo que realmente es: una texto generado dinámicamente a partir del contenido de una base de datos. Esto último es algo que suelen evitar, por la posibilidad de (no desde luego en un blog, sino en otro tipo de sitios) quedarse indexando indefinidamente cantidades ingentes de datos inútiles generados a partir de la variación del algún parámetro menor con que se accede a ellas. Así pues, este último formato de url es, además de el más simple, el más adecuado a nuestro propósito.
Dicho esto, en el antiguo servidor, como comentaba, no disponía de la posibilidad de establecer lo que se denomina url amigables, y tuve que esquivar los dos primeros tipos de dirección expuesta con un ardiz: indicar a Wordpress que la página tenía formato index.php/%postname%, con lo que las páginas disimulaban su carácter de dinámico de cara a los buscadores. He podido utilizar url amigables ahora gracias al cambio de servidor, pero de pronto he encontrado un problema que debí haber previsto: los buscadores siguen indexando los contenidos a través de las direcciones antiguas, que ahora no se corresponden con ninguna entrada existente. Por tanto, cuando alguien llegaba a ellas se encontraba con un mensaje que indicaba que no habían sido encontradas (se denomina error 404). La solución es simple, requiere informar a quien ha accedido a dicha página de que ésta ha dejado de existir, o simplemente se ha movido, lo que constituye el error 301. El mecanismo para hacerlo consiste en alterar la cabecera, una información que no va destinada al lector, sino al navegador mismo. Para Wordpress el procedimiento es sencillo, consiste en buscar dentro de la plantilla que estemos utilizando el fichero denominado 404.php, y modificarlo como a continuación indico: si el contenido del fichero es %texto%, hay que sustituirlo por
<?php
if (substr($_SERVER[’REQUEST_URI’],0,19)==’/phineus/index.php/’) {
Header( “HTTP/1.1 301 Moved Permanently” );
Header( “Location: http://www.atril.org/phineus/”.substr( $_SERVER[’REQUEST_URI’],19,1000) );
} else {
?> %texto% <?php } ?>
Es decir, examinamos la petición, y vemos si cumple el formato antiguo (sus 19 primeros caracteres son ‘/phineus/index.php/’, cada cual debería amoldarse a su situación particular). En tal caso enviamos al navegador del cliente la cabecera 301, en la que indicamos el formato de la nueva dirección, a la que éste saltará de inmediato. En caso contrario, la página se sirve de la manera habitual.
14 dAmerica/Denver August dAmerica/Denver 2008 a las 15:27
Muy bueno! yo siempre lo hacia con mod_rewrite pero no sabia que se podia hacer con PHP