Solo quería volver a este tema para mencionar algunas de las dificultades que encontré y quizás dejar algunas pistas para futuros viajeros, porque me resultó increíblemente difícil depurar esto.
Escape en la cadena de normalización de permalinks
El formato de la cadena de normalización de permalinks tiene dos componentes:
- La cadena de Expresión Regular
- La cadena de Reemplazo
Aparecen una tras otra en la cadena de normalización de permalinks, así:
Normalización de permalinks
Expresión Regular Reemplazo
<-------------------------><-------------
/(este)realmentees(intuitivo)/esteRealmenteNoEs\1
Es importante destacar que las barras se tratan de manera diferente en las distintas partes de la misma cadena.
Una barra (y otros caracteres de regex) en la parte de Expresión Regular de la cadena debe escaparse; sin embargo, las barras no necesitan escaparse en la parte de Reemplazo de la misma cadena y se tratarán literalmente.
El formato de las cadenas de URL entrantes
En segundo lugar, y esto me llevó un tiempo descifrarlo, se coincide con la URL como una descripción de ruta relativa desde la raíz, pero no recibirá el / como la primera parte de la cadena.
Por ejemplo, si la URL que usaba tu antiguo foro era así…
http://oldforum.com/chat/the-topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
…entonces la URL con la que coincidirá la expresión regular en tu normalización de permalinks se verá así…
chat/topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
es decir, una descripción de ruta desde la raíz pero sin la barra / inicial. (Supongo que esto puede variar según la estructura de las URL a las que estés redirigiendo, ¡pero no creo!).
Ejemplos
Aquí hay algunos ejemplos de mi proyecto de migración:
CATEGORY_LINK_NORMALIZATION = '/(cat)\\/(.*?)([#\\?].*)?$/cat/\\2'
POST_LINK_NORMALIZATION = '/chat\\/(.*?)\\/(post)\\/(.+?)([#\\?].*)?$/post/\\3'
TOPIC_LINK_NORMALIZATION = '/(chat)\\/(.*?)([#\\?].*)?$/topic/\\2'
El Proceso
La URL antigua es, como su nombre indica, la URL del elemento en el sistema antiguo.
La normalización de permalink (registrada en la configuración del sistema permalink_normalizations) tomará la URL entrante (sin la barra / inicial) y aplicará la coincidencia de regex. La URL normalizada resultante se utilizará para que coincida con el Texto de coincidencia de URL introducido en la pantalla /admin/customize/permalinks.