Introducción al Error de URL Rewrites en Magento 2
Uno de los problemas más frustrantes a los que se enfrentan los desarrolladores y administradores de tiendas e-commerce en Magento 2 es el error relacionado con las excepciones en la tabla url_rewrite. Este fallo suele manifestarse al intentar guardar productos, categorías o al regenerar las URL mediante comandos de consola, bloqueando por completo la gestión del catálogo o generando errores 404 masivos en el frontend.
Causas Principales de la Excepción en URL Rewrites
El núcleo de este problema radica en la duplicidad de registros en la base de datos dentro de la tabla url_rewrite. Las causas más comunes incluyen:
- Intentar asignar un slug o ruta de URL que ya existe en la base de datos para otra entidad (producto, categoría o página CMS).
- Interrupciones durante la indexación previa ejecutada mediante la CLI de Magento.
- Migraciones de datos mal ejecutadas desde plataformas de e-commerce anteriores.
- Conflictos generados por módulos de terceros que manipulan las rutas de las URLs automáticamente.
Método 1: Limpiar la Tabla url_rewrite y Regenerar Índices
La forma más directa de solucionar este conflicto en entornos de desarrollo o producción (previa copia de seguridad) es vaciar la tabla afectada y reconstruir los datos utilizando el comando CLI de Magento.
- Accede a tu servidor mediante SSH y navega hasta el directorio raíz de tu instalación de Magento.
- Entra a la base de datos usando tu cliente MySQL preferido y ejecuta la siguiente consulta para limpiar la tabla de reescrituras:
TRUNCATE TABLE url_rewrite; - Regresa a la terminal y ejecuta el indexador específico de Magento para reconstruir las URLs limpias:
bin/magento indexer:reindex catalog_url - Finalmente, limpia la caché del sistema para asegurar que los cambios se reflejen de inmediato:
bin/magento cache:clean
Método 2: Identificar y Eliminar Duplicados Manualmente
Si no deseas vaciar por completo la tabla url_rewrite debido a URLs personalizadas críticas para tu posicionamiento SEO, puedes localizar y eliminar únicamente los registros duplicados que generan la excepción.
- Ejecuta la siguiente consulta SQL en tu base de datos para detectar qué solicitudes de URL están colisionando:
SELECT request_path, COUNT(*) c FROM url_rewrite GROUP BY request_path HAVING c > 1; - Identifica los identificadores de tienda y los ID de entidad (
entity_id) que provocan la duplicidad. - Elimina los registros obsoletos o mal generados utilizando una sentencia condicional de borrado en SQL:
DELETE FROM url_rewrite WHERE url_rewrite_id = [ID_DUPLICADO]; - Vuelve a ejecutar la indexación general del sistema para validar que la excepción haya desaparecido:
bin/magento indexer:reindex