Redireccionar un directorio con HTTP 301 y expresiones regulares

Hace bastante tiempo escrbí un artículo sobre redirecciones con HTTP 301 para ficheros.

Si queremos mover todos los ficheros contenidos en un directorio, con ese sistema deberíamos hacerlo uno a uno. Para ayudarnos en esta tarea podemos usar RedirectMatch y expresiones regulares:

redirectmatch 301 /antiguo/(.*) http://www.otraurl.com/$1

Lo que encontremos dentro del (.*) se trasladará al $1 en la nueva dirección. Todos los ficheros y carpetas que cumplan con la condición /antiguo(.*), es decir, que contengan /antiguo se redireccionarán al dominio www.otraurl.com.

Para más información puedes investigar sobre expresiones regulares.

Cambiar guiones bajos por guiones en las URL con .htaccess

Siempre se ha dicho que es mejor usar guiones “normales” (‘-‘ ó dashes) en lugar de guiones bajos (‘_’ ó underscores) en las URL porque Google los indexaba mejor.

Sin embargo esto parece que está cambiando (o ha cambiado ya) tal y como comentaba Matt Cutts el año pasado. En ese post Matt nos contaba que, aunque recomienda usar guiones ‘-‘, él no perdería tiempo pasando de un sistema al otro.

Aún así es posible que quieras hacerlo. Aquí tienes una posible solución:

RewriteRule ^([^_]*)_(.*)\.html$ /$1-$2.html [R=301,L]
RewriteRule ^([^_]*)_([^_]*)_(.*)\.html$ /$1-$2-$3.html [R=301,L]

Esto cambia páginas del tipo:

seccion_coches.html
seccion_coches_motos.html

por:

seccion-coches.html
seccion-coches-motos.html

Y, dado que se usan redirecciones 301, no se pierde Page Rank ni se considera contenido duplicado.

Eliminar el www de la URL con .htaccess

Tal y como se suele aconsejar es recomendable decidirse por usar nuestro dominio con www o sin www para temas de posicionamiento. Yo suelo elegir sin las www. Para hacerlo una opción es usar el fichero .htaccess y poner el siguiente código:

# Quitar el www del nombre de dominio
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,QSA,L]

Si lo que buscamos es lo contrario, es decir, que se añada el www a la URL debemos usar:

# Redirigir el subdominio sin www a www
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,QSA,L]

Visto en Search Engine Land.

Activar register_globals

Vale, sí, es una locura hoy en día y una fuente inagotable de problemas en cuanto a seguridad se refiere. Sin embargo hay casos en los que en muy útil activar el register_globals. Precisamente hace unos días me encontré con un cliente que quería actualizar un software antiquísimo escrito en PHP que necesitaba tener activado el register_globals. Dado que no conocía el funcionamiento de su aplicación necesitaba tener activada la opción del register globals.

Dicho y hecho, edité el fichero .htaccess de la carpeta donde tenía instalada dicha aplicación y añadí la línea:

php_value register_globals 1

y listo.

¿Cómo saber qué locale están instalados con PHP?

Si intentamos mostrar una fecha en PHP es posible que nos encontremos que salga con el formato:

July 31, 2007

Para que se muestre correctamente debemos usar el “locale” correcto que haga que se muestre la fecha en el formato adecuado. Los locales más habituales son del estilo de éstos:

es_ES
es_ES.ISO_8859-1

Para establecer un locale se usa la siguiente función:

@setlocale(LC_TIME, 'es_ES');

El problema es que hay que hay que poner el nombre exacto del locale ya que de otra forma no funcionará. Aquí tenéis un sencillo script en PHP que te ayudará a saber qué locales están instalados en tu servidor:

<?php
echo "<hr><br>'Locale' disponibles:<br>";
system('locale -a');
?>

Si quieres que se muestren sólo los españoles:

<?php
echo "<hr><br>'Locale' disponibles:<br>";
system('locale -a | grep -i es');
?>

Instalar el módulo mod_rewrite en Ubuntu

Si necesitas usar el módulo mod_rewrite de Apache para usar basta con hacer:

sudo a2enmod rewrite

Editar el fichero /etc/apache2/sites-enabled/000-default:

sudo gedit /etc/apache2/sites-enabled/000-default

y cambiar: ‘AllowOverride None’ por ‘AllowOverride All’ en el apartado correspondiente al directorio www.

y luego reiniciar Apache:

sudo /etc/init.d/apache2 force-reload

El módulo mod_rewrite se suele usar para convertir las URL de una web en “amigables” para los navegadores. Por ejemplo para convertir:

index.php?page=main§ion=cursos&num=3

a algo como:

main/cursos/3

Esta segunda es más fácil de recordar para los humanos y a los buscadores les gusta más.

Qué es el fichero robots.txt

El fichero robots.txt indica a los buscadores qué es lo que pueden mirar en la web y lo que no. Si alguna vez has analizado el tráfico de tu web probablemente habrás visto que tienes un montón de visitas que realmente son los robots de los buscadores. Estos robots pueden consumir, en algunos casos, bastante ancho de banda y pueden meterse en sitios que preferimos que no queden indexados en los buscadores. Estos problemas pueden resolverse con el fichero robots.txt.

Es altamente recomendable tener este fichero en el directorio raíz de nuestro servidor. En la página The Web Robots Page (en inglés) se puede encontrar un buen montón de información sobre los robots: preguntas frecuentes, listas de robots, cómo crear un robots.txt, etc…

Puede que te resulte interesantes este analizador de ficheros robots.txt que nos avisa de posibles fallos y no da algunas recomendaciones:

http://tool.motoricerca.info/robots-checker.phtml

Redirecciones 301 con PHP

En algún post anterior hablé de cómo hacer redirecciones del tipo 301. Estas redirecciones indican que la página se ha movido permanentemente a otro sitio (lo que nos permite conservar el page rank de Google). En aquella ocasión expliqué cómo hacerlo con el fichero.htaccess y en esta ocasión voy a explicarlo cómo hacerlo en PHP.

La idea es bastante sencilla, basta con añadir estas dos líneas a nuestro script:

header( "HTTP/1.1 301 Moved Permanently" ); 
header("Location: http://www.nuevodominio.com");

La primera línea indica que la página se ha movido a otro sitio y la segunda reenvía al navegador (o buscador) a la nueva dirección. Podemos aprovechar que usamos PHP para redirigir con los parámetros adecuados. Por ejemplo imaginemos el siguiente caso:

Esta página en la web “vieja”:

http://www.viejodominio.com/index.php?mod=inicio&sec=3

Coincide con ésta en la página “nueva”:
http://www.nuevodominio.com/index.php?modulo=inicio&pagina=3

En esta caso bastaría poner al principio del index.php:
header( "HTTP/1.1 301 Moved Permanently" ); 
header("Location: http://www.nuevodominio.com/index.php?modulo=" . $_GET['mod'] . "&pagina=" . $_GET['sec']);

En la web podrás encontrar ejemplos más complejos como éste (en inglés):

http://www.zend.com/tips/tips.php?id=244&single=1

Buscar errores en tu configuración de DNS con DNS Report

DNS Report es un servicio que nos permite localizar errores en la configuración de las DNS de nuestros dominios. Una herramienta muy útil para saber por ejemplo porqué nuestro email tarda en responder.

El servicio es gratuito, pero también incluyen un servicio de pago que nos envía alertas en caso de que haya algún cambio en el dominio.

Añadir soporte GD a Apache en Ubuntu

Vale, esta me ha costado un poco. Tenía que configurar un servidor Apache para que tuviese soprote GD para PHP y después de muchas vueltas lo he encontrado:

sudo apt-get install php5-gd

Después sólo queda reiniciar el servidor Apache:

sudo /etc/init.d/apache2 restart