Justo ahora estoy metido en un follón dónde por no pensar bien la arquitectura de URL‘s de mis páginas web, ahora me toca hacer el cambio para tanto posts, como categorias y tags, y claro, con sus consecuentes redirecciones 301 para que los enlaces antiguos sigan funcionando y no se disparen los errores 404.
Lo peor de todo es que no puedo usar expresiones regulares y listo porque necesito el ID en las nuevas URL’s que no están en las viejas. (básicamente)
Para que quede claro, por ejemplo, estamos intentando cambiar la url “dominio.com/titulo-post” a “dominio.com/titulo-post-ID” y “dominio.com/nombre-categoria” por “dominio.com/c/nombre-categoria”
Por supuesto, miramos los plugins existentes primero. Estos prometían: “301 redirects” y “Permalink manager”. Pero no. Pueden ser muy útiles, pero no para este problema concreto.
Así que lo que hemos hecho es generar las redirecciones 301 para poner en nuestro htaccess mediante unas simples SQL’s.
Tal cual. Más fácil verlo que explicarlo.
Aqui va la SQL que nos da la redirección para las categorías:
SELECT CONCAT('Redirect 301 /', T.slug, ' https://www.midominio.com/c/', T.slug) as Redirect301 FROM `[PREFIJO]term_taxonomy` TT INNER JOIN `[PREFIJO]terms` T ON TT.term_id = T.term_id WHERE TT.taxonomy = 'category' AND TT.parent = 0
Por supuesto tendrás que poner tu dominio y personalizarla al gusto y cambiar el [prefijo] por el prefijo que tengan las tablas de tu mySQL.
Para los tags, es algo muy parecido, ya que ambos se encuentran en las mismas tablas:
SELECT CONCAT('Redirect 301 /', T.slug, ' https://www.midominio.com/t/', T.slug) as Redirect301 FROM `[PREFIJO]term_taxonomy` TT INNER JOIN `[PREFIJO]terms` T ON TT.term_id = T.term_id WHERE TT.taxonomy = 'post_tag' AND TT.parent = 0
Y para los posts…
SELECT CONCAT('Redirect 301 /', P.post_name, ' https://www.midominio.com/', P.post_name, '-', P.ID) as Redirect301 FROM `[PREFIJO]posts` P WHERE P. post_type = 'post' AND P.post_status = 'publish'
Al ejecutar estas consultas con phpMyAdmin tendremos una columna con los resultados. Entonces, solo tenemos que seleccionar que queremos ver 500 resultados (o todos) y que queremos ver el resultado completo para que no se corte el texto…

Una vez tenemos todos los resultados, tenemos un pequeño botón al final para copiar los resultados al portapapeles.

I una vez copiados los pegamos en Notepad++ ya que les tenemos que hacer un pequeño tratamiento antes de poder pegarlo en nuestro htaccess.
Para poder hacer este tratamiento (o almenos poder ver que estamos haciendo), nos vamos a “view” -> “show symbol” -> “Show White Space and TAB”

Con lo que ahora veremos unas pequeñas marcas que nos indican si hay espacios en blanco o tabulaciones.
Ahora borramos toda la parte descriptiva para dejar solo las redirecciones, (o nos lo podemos llevar al htaccess y dejarlo como comentario para acordarnos de cómo hemos sacado estas redirecciones).
Ahora que ya lo tenemos limpio, les quitamos el tabulador que hay al final de cada una de las redirecciones mediante la opción “Edit” -> “Blank Operations” -> “Trim Trailing Space”

Veréis que esas flechitas naranjas que he marcado en rojo (y que harían que pete nuestro htaccess), desaparcen.
Ahora por último, tenemos que limpiar lo que hay entre la parte izquierda y la derecha de cada redirección, es decir, entre la página de origen, y la página de destino.
Para hacer esto simplemento seleccionamos ese trozo de “blanco”, y pulsamos “Ctrl + H” para reemplazar.

En el “find what” parece que no hay nada, pero sí lo hay. En “Replace with”, lo vaciamos, y dejamos un espacio en blanco. Nos aseguramos que este la opción de “Extended” en el “Search mode” y ya le podemos dar caña al “Remplazar todo”.
Veréis que ahora envez de un puntito naranja y un espacio en blanco, entre cada parte de las redirecciones solo queda un puntito naranja.
Ahora ya si, nuestras redirecciones están listas para pegarlas en el htaccess. 🙂
Para pegarlas, recomiendo primero, hacer una copia de seguridad del archivo… que luego si algo va mal, fastidiamos toda la web y mejor no ponernos nerviosos…
Una vez hecha la copia, abrimos el htaccess, y mi sugerencia es poner todas las redirecciones en un nuevo bloque donde expliquemos con comentarios lo que estamos haciendo y porqué lo hacemos y la fecha.
Algo así:

(También puedes poner el enlace a este post, si eso…)
Pues nada. Con esto en principio, ya estaría todo. Subís el fichero y a funcionar.
Algunos problemas que podéis encontrar…
Si al subir el archivo, no carga la web. Peta estrepitosamente. Entonces es que hay algo que no está bien en el htaccess.
Ves borrando bloques de redirecciones hasta que funcione, y luego los vas volviendo a poner poco a poco hasta que veas dónde está el fallo.
Si lo que te pasa es que al cargar una categoria se queda haciendo un bucle de redirecciones, mirate si es que no tienes algún plugin que te está “trucando” las URLs de las categorias.
En mi caso me pasó que tenía puesto que RankMath quitara la base de las categorias de la URL.
Desactive la opción, borré las cachés del plugin WPC, y listo.
En fin. Espero que no encontréis muchos problemas, pero sea cual sea tu experiencia, no dudes en dejarnos un comentario para saber que tal te ha ido.
Happy coding!