Archivo de la etiqueta: Htaccess

Copia de seguridad automática de un blog WordPress – Parte 1: Crear la copia de los ficheros y base de datos

[blog]

Hace ya tiempo que estoy concienciado de lo importante que son las copias de seguridad, pero aún así no siempre me acuerdo de tener las copias al día. Es por esto que lo ideal es tener todo el proceso automatizado, pero no todos los servidores web nos ofrecen esta opción. Hasta ahora siempre he usado hostings gratuitos. El servicio no era el mejor y tiene múltiples inconvenientes, pero sobre todo se quedan muy pobres en las opciones que ofrecen para realizar copias de seguridad. Esto, unido a que tras actualizarme a la última versión de WordPress empezó a fallar el blog, me decidieron a buscar un servidor de pago.

Mis requisitos eran tener acceso al servidor por SSH y poder crear tareas CRON. Tras comparar algunas opciones, me decidí por 1and1, que tenía el mejor precio y cumplía con mis requisitos. He leído que su servicio de atención al cliente no es el mejor, pero las dudas que yo he tenido me las han respondido con rapidez.

Dicho esto, empecemos con la copia de seguridad:

Yo tengo el WordPress en el directorio raíz del FTP. Debería haberlo puesto en una subcarpeta, pero ahora ya no me apetece cambiar, así que se queda así y buscaré como solucionar los problemas que salgan.

En el mismo directorio raíz he creado una carpeta llamada backup. Lo primero será impedir el acceso a esta carpeta. Para ello en el fichero .htaccess que también se encuentra en el raíz, añadimos lo siguiente:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?la-url-de-tu-web.com$
RewriteRule ^backup - [F]
</IfModule>

En esta carpeta de backup tendremos dos ficheros que se encargarán de hacer las copias de seguridad de la base de datos y de los ficheros. Empecemos con la copia de seguridad de la base de datos. El fichero se llamará wordpress-backup-files.sh y su contenido será el siguiente:

#!/bin/sh
tar czf /path-to-files/backup/`date "+%Y%m%d-%H-%M"`-wordpress-files.tar.gz /path-to-files/ --exclude='/path-to-files/backup' --exclude='/path-to-files/backup/*' --exclude='/path-to-files/logs' --exclude='/path-to-files/logs/*'

El primer parámetro será el nombre del fichero con el contenido del blog. Se genera automáticamente con la fecha. Los --exclude especifican que ficheros y carpetas no queremos añadir a la copia. En este caso, como nuestra carpeta de backup está al mismo nivel que el resto, la excluimos, así como su contenido, y hacemos lo mismo con la carpeta de logs.

La segunda parte será hacer una copia de seguridad de la base de datos. De ello se encargará el fichero wordpress-backup-bd.sh cuyo contenido será:

mysqldump -h [host de la base de datos] -u [usuario] -p[contraseña] [nombre de la base de datos] | gzip > /path-to-files/backup/$(date +%Y%m%d-%H-%M)-wordpress-mysql.gz

Por último tendremos que programar el cron para que ejecute estos dos ficheros. En mi caso lanzaré la copia de seguridad el domingo a las 3:00 la base de datos y a las 3:30 los ficheros:

#Weekly database backup
0 3 * * 0 /path-to-files/backup/wordpress-backup-bd.sh

#Weekly files backup
30 3 * * 0 /path-to-files/backup/wordpress-backup-files.sh

Nueva cabecera y cambio de nombre

[blog] [japonés] [programación]

Desde que empecé a usar EggBlog, quería cambiar la cabecera que trae por defecto, pero no teniendo una imagen clara de lo que quería, la aguanté durante estos dos meses. Este fin de semana se me ocurrió una idea sencilla, y resultona, que consistía en mostrar el nombre del blog parte en japonés y parte en español, intentando mostrar un poco la fusión de los temas que trato.

Primero intenté escribir yo mismo los caracteres, pero eran poco menos que horribles, así que me pongo a buscar por internet algunos ya dibujados, y cual es mi sorpresa al descubrir durante la búsqueda que el nombre del blog estaba mal escrito!!!

Yo, que estoy intentando aprender japonés, y en dos meses no me había dado cuenta que me faltaba una ene en el título…

La forma correcta es Konnichi wa (こんにちは) que viene a significar “Buenos días/Buenas tardes”. Tampoco a primera hora de la mañana, donde se diría Ohayo Gozaimasu (おはようございます) ni muy tarde por la tarde, donde ya pasa a ser Konban wa (こんばんは).

Además de renovar la cabecera, he aprovechado para cambiar el favicon, homenajeando a la ene que dejé olvidada. En la Wikipedia hay buenas instrucciones de como cambiar el favicon y su utilidad.

Por suerte, el cambio de dominio y la configuración en el servidor han sido triviales y apenas me ha llevado unos minutos. El problema son las búsquedas de Google o los enlaces directos a alguno de los artículos, que ahora darán un error. Estoy por duplicar el contenido durante un tiempo hasta que encuentre una solución alternativa.

Si alguien tiene algún enlace al blog o a algún artículo, que le añada una ene porfavor! 😀

[ACTUALIZACIÓN 11/04/2011]

He encontrado una solución provisional que evita la página de error. Conseguir que un enlace a uno de los artículos en la vieja dirección lleve al artículo en la nueva se me antoja complicado, por lo que he decido que por lo menos todos los enlaces antiguos lleven a la nueva página principal.

Para ello he modificado el .htaccess, quedando de la siguiente manera:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule .*$ index.php [L]

Con esto consigo que cualquier enlace antiguo lleve a la vieja página principal, cuyo contenido pasa a ser el siguiente:

<?php
   header( 'Location: http://www.konnichiwamundo.co.cc' ) ;
?>

Y con esto nos encontramos en la nueva página principal. Algo es algo 😀

¿Indexa Google las páginas PHP?

[programación]

En teoría sí, pero por alguna razón a mi no.

Encontré este artículo que trata el tema de la indexación de páginas PHP por parte de Google y esclarece muchos de los mitos.

Ahí se explica que no debería haber ningún problema con las páginas generadas dinámicamente, pero en el caso de eggBlog, no parece indexar los artículos. En este caso se accede a los artículos a través de la página news.php y una ID, por ejemplo:

http://tu-dominio.com/news.php?id=12

Parece que el consenso general es que Google tiene problemas, o se esfuerza menos, en indexar páginas que tienes más de 2 parámetros, pero en mi caso solo tengo 1, el id, y no debería dar problemas…

El caso es que en el foro de eggBlog encontré un hilo en el que comentaban como sustituir la utilización de IDs por Friendly URLs. El usuario Faris se curró una modificación para el blog para implementar las Friendly URLs

Tras probar la modificación, estaba casi a punto, pero daba un fallo al intentar ir a los enlaces. Parecía cosa del .htaccess, así que tras investigar un poco encontré la respuesta. Solo hacía falta añadir esta linea:

RewriteBase /

El código completo del .htaccess por si alguien lo necesita es el siguiente:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule .*-([0-9]+).htm$ news.php?id=$1 [L]
RewriteRule .*-([0-9]+)/$ news.php?id=$1
RewriteRule (.*)-([0-9]+)$ $1-$2/ [R]
RewriteRule .*/([0-9]+)/$ news.php?id=$1
RewriteRule (.*)/([0-9]+)$ $1/$2/ [R]

Y aquí la página que suelo usar para trabajar experimentar con expresiones regulares.

El resultado final es que los enlaces a la derecha que van a los articulos muestran en la URL el nombre del artículo y el rastreador de Google debería de entrar en todos. A ver que tal en la próxima indexación…

[ACTUALIZACIÓN 15/02/2011]

Es irónico que la entrada que habla sobre Friendly URLs tenga una que justamente falla. ¿El problema? Pues que se está utilizando el título de la entrada como URL y ahí tengo un bonito interrogante (?), que se usa para pasar parámetros… y peta. Al principio pensaba que también estaban afectando el otro interrogante y el acento, pero solo quitando el interrogante de cierre se ha solucionado, aunque la URL ya no quedaba “bonita” ya que los caracteres especiales se sustituían por su código, por lo que he acabado sustituyendolos todos.

El método eb\_links\_article del fichero _lib/global.php queda así:

// F4ris - 20090708 - Function to produce SEO friendly links, dependant on config flag.
function eb_links_article( $title,$id ) {
    global $config;
    if( $config['seo_flag'] == 1 ) {
        $unsuportedChars = array( "&aacute;", "&eacute;", "&iacute;", "&oacute;", "&uacute;", "&iquest;", "?" );
        $suportedChars = array("a", "e", "i", "o", "u", "", "");
        $tmpTitle = str_replace( $unsuportedChars, $suportedChars, $title );
        $link = $config['domain'] . urlencode( str_replace(" ", "-", str_replace( " - ", "-", $tmpTitle ) ) ) . "-" . $id . ".htm";
    } else {
        $link = $config['domain'] . "news.php?id=" . $id;
    }
    return $link;
}