Redireccionar un dominio con PHP

La manera correcta de redireccionar un dominio o página web a una nueva ubicación, una nueva URL, es utilizando el código de estado HTTP 301.

¿Qué es el redireccionamiento 301?

El redireccionamiento 301 es el método más efectivo para preservar tu posicionamiento en los buscadores a la hora de redirigir o renombrar un dominio (o página web) a una nueva URL. El código 301 es interpretado como Movido Permanentemente (Moved Permanently) y de esta manera no sólo se informa a los agentes de usuario (navegadores, etc) de la nueva ubicación sino que ésto también nos permite notificar o informar a los motores de búsqueda de que la ubicacion del recurso en cuestión ha cambiado.

Los motores de búsqueda consideran que los dominios example.com y wwww.example.com son diferentes y que cada uno provee diferentes contenidos. Si bien en la práctica esto generalmente no ocurre, ya que por lo general uno juega limpio, un error puede llegar a hacer detectar a los motores de búsqueda que nuestro contenido es spam (spammindexing) lo que terminaría afectando seriamente el posicionamiento del sitio en cuestion.

Otra cosa que hay que tener en cuenta es que el hecho de no informar cual es nuestro dominio preferido a los motores de búsqueda conlleva a que éstos tengan que analizar nuestro contenido dos veces y, si bien en la práctica no se ve, esto también podría afectar el posicionamiento del dominio. En el peor de los casos los buscadores podrían detectar que estamos publicando contenidos duplicados (duplicate content) y penalizarnos por eso.

Si bien esto en la práctica por lo general no ocurre, ya que por lo general uno juega limpio, siempre es preferible prevenir que curar. Otra ventaja con respecto a este tema es que nos permite ahorramos recursos en el servidor donde hosteamos nuestro dominio (ancho de banda, procesamiento, etc.) así como también en los servidores de los buscadores.

Ejemplos:

En los siguientes ejemplos se indica cómo redireccionar "example.com" a "www.example.com" así como también como redireccionar un recurso (una página, una imagen, un mp3, etc.) a una nueva ubicación (evitando las cuestiones extras de lógica en PHP para que no se extienda demasiado):

Redireccionar "dominio.com" a "www.dominio.com" utilizando PHP:

<?php
// Redirect non-www to www.
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com/');
exit;
?>

Redireccionar "dominio.com" a "www.dominio.com" mediante un archivo .htaccess:

<Directory "/path/to/document/root">
    Order allow,deny
    Allow from all
    <IfModule mod_rewrite.c>
        RewriteEngine On

        RewriteCond %{HTTP_HOST} ^example\.com [NC]
        RewriteRule .? http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </IfModule>
</Directory>

Redireccionar un recurso con PHP, "http://www.example.com/faq.php" a "http://www.example.com/faq/":

<?php
// Redirect http://www.example.com/faq.php to http://www.example.com/faq/
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com/faq/');
exit;
?>

Redireccionar un recurso mediante un archivo .htaccess, "http://www.example.com/faq.php" a "http://www.example.com/faq/":

<Directory "/path/to/document/root">
    Order allow,deny
    Allow from all
    <IfModule mod_rewrite.c>
        RewriteEngine On

        RewriteRule ^faq.php$ /faq/ [R=301,L]
    </IfModule>
</Directory>

Enlaces relacionados a este tema:

Comentarios:

  1. En realidad para cuando armas un VHOST usas ServerAlias que es una directiva la cual te permite redireccionar www al sin o al vesre.

    Enviado por alberto ferrer el 22/12/2008 11:22:36 (#).

  2. @Alberto: Error!, ServerAlias te permite tener nombres alternativos para acceder a un mismo mismo name-virtual host: Alternate names for a host used when matching requests to name-virtual hosts.

    ServerAlias es una de las razones que hacen que surja este problema, ya que por lo general se lo configura de la siguiente manera:

    ...
    ServerName example.com
    ServerAlias *.example.com
    ...

    Es en éste tipo de casos donde aparecen los múltiples subdominios y los problemas con los buscadores, ya que no importa lo que pongas detrás del punto, siempre vas a caer en el mismo lugar: example.com.

    En realidad, en vez de utilizar un alias tan general, lo que se debe hacer es lo siguiente:

    ...
    ServerName example.com
    ServerAlias www.example.com
    ...

    Esto es para facilitarle el ingreso al usuario, ya que no todos indican www. cuando tratan de acceder a un sitio.

    Luego redireccionás, con cualquiera de los métodos anteriores, al usuario al dominio apropiado y toda la operación termina siendo transparente para él.

    Enviado por Juan el 22/12/2008 11:22:13 (#).

  3. My Bad T_T

    Enviado por alberto ferrer el 22/12/2008 06:22:38 (#).