Cambiando permalinks con expresiones regulares
Relay | octubre 17, 2014Hace unos días quise cambiar un poco la estructura de los permalinks de la web sobre cine Filmclub.
Pensé que habría que hacer algo, pero comprobando las noticias (de cualquier antigüedad), el propio wordpress redireccionaba a lo que toca. Lo que cambié fue que en lugar de tener la estructura por día, la tuviera por mes (muchas de las webs con más pagerank y más tráfico obvian el día, por algo será). Pasando de tener una url como:
filmclub.es/año/mes/dia/titulodelanoticia/
A quitar el día quedando el tema así:
filmclub.es/año/mes/titulodelanoticia/
Qué fácil, pensé. No podía estar más medio-equivocado. A los pocos días empiezan a saltar errores de 404 en Google Webmaster. En realidad no lo entendía, hasta que vi que, aparte de algunos links mal puestos, lo que fallaba eran las URL que apuntaban a imágenes de posts.
Si ponía la url tal cual, fallo 404.
Si le quitaba el día, cargaba bien.
Si ponía la url tal cual pero quitaba la última parte de la URL, redireccionaba bien y cargaba la noticia.
Así que como no vi ninguna solución consultando por wordpres, nginx y rewrites, era hora de aprender algo sobre Expresiones Regulares, que siempre se me atrancan. Tras mucho probar y buscar, terminé usando un formulario de una web que parece que está hecha para Google Analytics. La web en cuestión es Metriplica, en su apartado de expresiones regulares, con documentación incluída y demás.
Al final es solo poner una regla de rewrite en el fichero .conf del dominio del Nginx. Tras jugar un poco con la web de Metriplica, pude conseguir la expresión regular siguiente (con el rewrite aquí):
rewrite ^/([0-9][0-9][0-9][0-9])/([0-9][0-9])/([0-9][0-9])/(.*) /$1/$2/$4 permanent;
Explicación:
De la URL que te pidan, se coge lo que venga después del dominio.
Si hay 4 separaciones o más, quiero que lo dividas en 4 variables, siendo la primera una que sea numérica de 4 dígitos (el año) de 0 al 9 cada dígito, la segunda también numérica de dos dígitos (el mes), la tercera igual que la segunda (para los días), y el resto (independientemente de que vengan números, letras, o graffitis.
Si lo de arriba coincide, hay que reescribir la URL quitando la tercera variable, ergo tendremos el año, el mes y el resto.
Marcar esto como cambio permanente. El rewrite con esa opción ‘permanent’ al final, devuelve un código 301.
Nada como aprender de esta manera para que se te quede.