Jul 012014
 
Artículo WordPress

Por distintos motivos, en ocasiones podemos estar interesados en “capturar” las peticiones que recibe nuestro servidor web, para enviar al usuario a una página distinta de la que originalmente fué solicitada. En este artículo se comentan las distintas posiblidades que existen para conseguir este objetivo, en el caso de una instalación de WordPress.

Utilizar un plugin ya existente

Naturalmente, tratándose de WordPress es difícil encontrar alguna funcionalidad para la que no exista ya un plugin.

En el caso de las redirecciones, existen algunos muy completos, como el plugin “redirection” de urbangiraffe.

Pero instalar un plugin siempre supone añadir complejidad a la instalación. Además, hay que mantener el plugin actualizado, confiar en que no tenga bugs ni agujeros de seguridad, en que el autor del plugin lo mantenga actualizado conforme aparezcan nuevas versiones de wordpress, etc.

Por ello, si la funcionalidad que deseamos se puede conseguir realizando una pequeña modificación en la configuración de wordpress, o en el código PHP del tema que utiliza nuestro blog, ésta puede la mejor opción.

Editar el fichero .htaccess

Si las URLs a las que queremos aplicar la redirección son pocas, o se pueden describir con una expresión regular, la manera más simple de implementar la redirección puede ser mediante unas directrices de configuración de Apache añadidas al fichero .htaccess en el directorio raíz del blog.

Por ejemplo, si queremos redirigir las URLs de la forma http://www.servidor.com/2013/* a http://www.otro-servidor.com/*, podemos añadir en el fichero .htaccess, precediendo a las líneas añadidas por wordpress, una regla de reescritura de la forma:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_HOST} www.servidor.com
    RewriteRule 2013/(.*) http://www.otro-servidor.com/$1 [R=301,L]
</IfModule>

# BEGIN WordPress
   ...

 

Implementar la redirección en el filtro “template_redirect” de WordPress

Esta es sin duda la manera más flexible de implementar la funcionalidad de redirección.

WordPress ejecuta el filtro “template_redirect” cuando ya ha realizado todos el proceso estándar de la solicitud, inmediatamente antes de entregar la solicitud al correspondiente script del tema activo para la presentación de la página.

De este modo, se pueden consultar todos los atributos del objeto $wp_query, para saber el tipo de página solicitada, etc.

Para incorporar un filtro “template_redirect” en el tema activo, añadimos al fichero “functions.php” del tema las siguientes líneas de código PHP:

add_filter('template_redirect', 'mi_redireccion' );

function mi_redireccion() {
    global $wp_query;

      ...
}

Por ejemplo, supongamos que queremos implementar la redirección a otro servidor sólamente para las páginas no encontradas cuya url comienza por “/2013”. La función “mi_redireccion” sería de la forma:

function mi_redireccion() {
    global $wp_query;

     // Si es una página no encontrada...
    if ($wp_query->is_404) {
        $url = $_SERVER["REQUEST_URI"];
        // Si la URL de la página solicitada empieza por "/2013"...
        if (preg_match("/^/2013/",$url)) {
            // Enviar una redirección permanente al otro servidor
            wp_redirect( "http://www.otro-servidor.com" . $url, 301 );
            exit;
        }
    }
}

En este ejemplo vemos que utilizamos el atributo “is_404” del objeto global wp_query. Cuando se ejecuta el filtro “template_redirect”, éste y todos los demás atributos accesibles de dicho objeto están ya adecuadamente inicializados.

También vemos que la redirección la realizamos con una llamada a la función wp_redirect(), que también pertenece a la librería de funciones de WordPress. Esta función recibe como argumento la URL absoluta a la que se redirige la solicitud, y opcionalmente un segundo argumento con el código de status a entregar. En el ejemplo, se pasa el código 301 que significa “redirección permanente”.

La llamada a wp_redirect debe ir seguida por una llamada a “exit;”, para evitar que continúe procesándose la solicitud.

Referencias

 

 Publicado por en 9:06 am

 Deja un comentario

(requerido)

(requerido)