Só queria voltar a este assunto para mencionar alguns dos problemas que encontrei e, talvez, deixar algumas pistas para futuros viajantes - porque achei isso infernalmente difícil de depurar.
Escapando na string de normalização de permalinks
O formato da string de normalização de permalinks tem dois componentes
- a string da Expressão Regular
- a string de Substituição
Eles aparecem, um imediatamente após o outro, na string de normalização de permalinks assim
Normalização de Permalinks
Expressão Regular Substituição
<-------------------------><-------------
/(this)reallyis(intuitive)/\\1reallyisn't\\2
Importante, as barras são tratadas de forma diferente nas diferentes partes da mesma string.
Uma barra (e outros caracteres regex) na parte da Expressão Regular da string deve ser escapada, no entanto, as barras não precisam ser escapadas na parte de Substituição da mesma string e serão tratadas literalmente.
O Formato das strings de URL de entrada
Em segundo lugar, e isso me levou um tempo para acertar, você corresponde à URL como uma descrição de caminho relativo a partir da raiz, mas você não receberá o / como a primeira parte da string.
Por exemplo, se a URL que seu antigo fórum usa fosse assim…
http://oldforum.com/chat/the-topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
…então a URL que sua expressão regular em sua normalização de permalinks corresponderá será assim…
chat/topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
ou seja, uma descrição de caminho a partir da raiz, mas sem a barra / inicial. (Eu acho que isso pode variar dependendo da estrutura das URLs que você está redirecionando - mas eu não acho).
Exemplos
Aqui estão alguns exemplos do meu projeto de migração
CATEGORY_LINK_NORMALIZATION = '/(cat)\\/(.*?)([#\\?].*)?$/cat/\\2'
POST_LINK_NORMALIZATION = '/chat\\/(.*?)\\/(post)\\/(.+?)([#\\?].*)?$/post/\\3'
TOPIC_LINK_NORMALIZATION = '/(chat)\\/(.*?)([#\\?].*)?$/topic/\\2'
O Processo
A URL Antiga é como o nome sugere - a URL do item no sistema antigo.
A normalização de permalink (registrada na configuração do sistema permalink_normalizations) pegará a URL de entrada (sem a barra / inicial) e aplicará a correspondência regex. A URL normalizada resultante é então usada para corresponder ao Texto de Correspondência de URL inserido na tela /admin/customize/permalinks.