Je voulais revenir sur ce point pour mentionner quelques pièges que j’ai trouvés et peut-être laisser quelques pistes pour les futurs voyageurs - car j’ai trouvé cela diaboliquement difficile à déboguer.
Échappement dans la chaîne de normalisation des permaliens
Le format de la chaîne de normalisation des permaliens comporte deux composantes :
- la chaîne d’Expression Régulière
- la chaîne de Remplacement
Elles apparaissent l’une après l’autre dans la chaîne de normalisation des permaliens, comme ceci :
Normalisation des permaliens
Expression Régulière Remplacement
<-------------------------><------------->
/(this)reallyis(intuitive)/\\1reallyisn't\\2
Il est important de noter que les barres obliques sont traitées différemment dans les différentes parties de la même chaîne.
Une barre oblique (et d’autres caractères spéciaux de regex) dans la partie Expression Régulière de la chaîne doit être échappée, cependant, les barres obliques n’ont pas besoin d’être échappées dans la partie Remplacement de la même chaîne et seront traitées littéralement.
Le format des chaînes d’URL entrantes
Deuxièmement, et cela m’a pris un certain temps à comprendre, vous faites correspondre l’URL comme une description de chemin relatif à partir de la racine, mais vous ne recevrez pas le / comme première partie de la chaîne.
Par exemple, si l’URL que votre ancien forum utilisait ressemblait à ceci…
http://oldforum.com/chat/the-topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
…alors l’URL que votre expression régulière dans votre normalisation de permalien fera correspondre ressemblera à ceci…
chat/topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
c’est-à-dire une description de chemin à partir de la racine mais sans la barre oblique / initiale. (Je suppose que cela peut varier en fonction de la structure des URL que vous redirigez - mais je ne pense pas).
Exemples
Voici quelques exemples de mon projet de migration :
CATEGORY_LINK_NORMALIZATION = '/(cat)\\/(.*?)([#\\?].*)?$/cat/\\2'
POST_LINK_NORMALIZATION = '/chat\\/(.*?)\\/(post)\\/(.+?)([#\\?].*)?$/post/\\3'
TOPIC_LINK_NORMALIZATION = '/(chat)\\/(.*?)([#\\?].*)?$/topic/\\2'
Le Processus
L’Ancienne URL est, comme son nom l’indique, l’URL de l’élément dans l’ancien système.
La normalisation des permaliens (enregistrée dans le paramètre système permalink_normalizations) récupère l’URL entrante (sans la barre oblique / initiale) et applique la correspondance regex. L’URL normalisée résultante est ensuite utilisée pour établir une correspondance avec le Texte de correspondance d’URL saisi sur l’écran /admin/customize/permalinks.